我正在设计一种编程语言,而我正在考虑的问题之一就是为什么编程语言需要很长时间才能编译。假设c ++需要很长时间,因为它需要在每次编译文件时解析并编译头文件。但是i -heard-预编译的标题需要多长时间?我怀疑c ++不是唯一有此问题的语言。
答案 0 :(得分:18)
一个C ++特定的问题使得它非常缓慢,与几乎任何其他语言不同,你不能独立于语义分析来解析它。
答案 1 :(得分:14)
编译是一个复杂的过程,涉及很多步骤:
(暂且没有链接。)
当然,这需要一些时间用于较长的课程。
答案 2 :(得分:8)
预编译的头文件 way 更快,至少自1988年以来就已为人所知。
C编译器或C ++编译器花费很长时间的常见原因是它必须#include,preprocess,然后才能使用gzillions of tokens。
作为一个练习,您可能会发现在典型的头文件集合上运行cpp需要多长时间 - 然后测量输出的lex所需的时间。
gcc -O使用了由Chris Fraser和Jack Davidson开发的非常有效但有些慢的优化技术。大多数其他优化器可能很慢,因为它们涉及对相当大的数据结构的重复迭代。答案 3 :(得分:6)
语言设计 会对编译器性能产生影响。 C ++编译器通常比C#编译器慢,后者与语言设计有很大关系。 (这也取决于编译器实现者,Anders Hejlsberg实现了C#并且是最好的之一。)
C ++的简单“头文件”结构导致其性能降低,尽管预编译头文件通常可以提供帮助。 C ++是一种比C语言复杂得多的语言,因此C编译器通常更快。
答案 4 :(得分:6)
编译 需要长时间:tcc编译ANSI c足够快,可用作解释器。
要考虑一些事情:
答案 5 :(得分:3)
他们需要花费的时间,这通常取决于你注入编译单元的多少外来东西。我希望你能更快地手工编译它们: - )
第一次编译文件时,根本没有标题。然后根据需要添加它们(并在完成后检查是否仍然需要它们)。
减少时间的其他方法是保持编译单元的小型化(即使是每个文件的一个函数,在极端情况下),并使用类似make的工具来确保只构建所需的内容。
有些编译器(IDE真的)在后台进行渐进式编译,这样它们(几乎)总是接近完全编译。
答案 6 :(得分:1)
运行Idera RAD Studio(有一个免费版本)。它带有C ++和Delphi。与执行相同操作的C ++代码相比,Delphi代码的编译时间很少。这是因为C ++在过去的几十年中经历了可怕的发展,并没有考虑到编译器的复杂性,因为它是由上下文确定的复杂宏,并且在某种程度上称为“ .hpp”地狱。艾达(Ada)也有类似的问题。 Pascal的Delphi方言从一开始就被设计为一种有效的编译语言。因此,编译器和运行程序只需花费几秒钟而不是几分钟,从而使迭代调试变得轻松快捷。调试缓慢以编译语言会浪费大量时间,而且您会痛苦不已!顺便说一句,安德斯(Anders)也曾在M $偷走Delphi之前就写了它!
答案 7 :(得分:0)
我认为这里的其他答案已经错过了缓慢进行C ++编译的一些重要部分:
.obj
/ .o
个文件保存到磁盘,读取它们然后链接它们的编译模型#pragma once
相比之下,这些并不会减慢C ++编译速度:
顺便说一下,优化是最大的减速之一,但它是这里唯一的减速,实际上是必要的一些措施,而且它完全是可选的。