当前位置: 首页 > 科技观察

GCC使用C++编译

时间:2023-03-19 00:28:43 科技观察

GCC于2012年8月15日从cxx-conversion分支合并了一个补丁-Merge,这意味着以后GCC的编译只能使用C++编译器。意味着gcc的实现代码开始转向C++。你可能有两个问题,一个问题是为什么GCC要转为C++实现?在没有C++编译器的情况下如何使用C++编译器编译代码?这不是“先有鸡还是先有蛋”的问题吗?好吧,让我们来看看。WhyuseC++在GNU的C++Conversion文档中,我们可以在Background中看到这样的描述:无论我们使用C还是C++,我们都需要尽量保证接口易于理解,代码合理模块化,内部文档对应对于代码,新开发人员可以编写新的通行证并修复错误。这些都是我们需要考虑的重要问题。C中不存在的C++特性——许多书籍和网站中都有详细记录的特性——不是一个重要的问题。这句话的意思可以理解为今天用C语言实现GCC有点不堪,因为开发者觉得不管我们用C还是C++,我们都需要下功夫来保证接口易于使用理解,让我们的代码合理模块化,让内部文档和代码保持一致,这样可以更好的组织代码,有利于新手修复bug。而C++只是让他们可以更好地完成这些事情。GNU还给出了以下理由:C++是一种标准化的、流行的、大众化的语言。C++是C90的超集。C++作为C的扩展,在性能上和C一样好。C++在有意义的情况下支持更简洁的代码。C++使您更容易编写更简洁的界面。C++永远不会让你的代码更丑陋。C++不是万能的,它是C的改进。然后,给了一个PDFhttp://airs.com/ian/cxx-slides.pdf,是Google的IanLanceTaylor的PPT。这篇文档可以帮助大家更好的理解我在《C++的坑多吗?》View里写的东西。不知道要说多少遍,C++的封装、继承和多态性在代码组织上比C语言好太多了。自己看代码吧:数据结构的操作——你写的肯定不会有好的STL结构或者继承?函数指针还是多态?垃圾收集还是智能指针?为什么不是C++?C++慢吗?某些特性会更慢,但有时C++更快,你可以只使用你喜欢的C++特性。C++复杂吗?它只是另一种编程语言,可以让您更轻松地维护程序员。FSF不喜欢C++!因为FSF(自由软件基金会)这些家伙不写代码。Bootstrapping***,我想介绍一下Bootstrapping。所谓Bootstrapping,就是用自己的语言写一个编译器,自己编译。也就是说,如果要编译gcc,就需要用c编译器来编译。这就是bootstrapped的过程,bootstrapping的过程。包括BASIC、Algol、C、C++、Pascal、PL/I、Factor、Haskell、Modula-2、Oberon、OCaml、CommonLisp、Scheme、Java、Python、Scala等语言都是这样做的。这样做的主要好处是可以自己测试,编译器的改进和语言的改进相辅相成。然而,这是一个“先有鸡还是先有蛋”的问题。如果需要用X语言为X语言编译器编写语言,可以这样:用Y语言实现X语言的解释器或翻译器。NiklausWirth说第一个Pascal编译器是用Fortran编写的。已经存在用语言Y编写的语言X的编译器或解释器。这就是Scheme所做的。已经有一个编译器可以编译较早版本的X语言,然后可以使用较早版本的X语言来编译新版本的X语言。这就是Java、Haskell和最初的FreePascal所做的。X在某个平台上的编译器已经存在,可以利用交叉编译技术在另一个平台上编译X语言,这就是C语言所做的。用X语言写一个编译器,然后手动编译(不需要特别优化),(注:手动编译估计是手动翻译成机器汇编代码),然后运行这个手动编译的编译器编译这个源码编译器,并对其进行优化。DonaldKnuth在他的WEBliterate编程系统中使用了这种方法。原文链接:http://coolshell.cn/articles/8115.html