Compiler construction 是什么导致编译器运行缓慢? 我发现GO与编译语言相比,编译速度快得多,与其他C++语言一样。我想,几乎和运行解释语言一样快。Haskell比go-to-compile慢,即使它像go一样,是用运行时和垃圾收集器编译的(对吗?)。我怀疑类型系统的复杂性是主要原因,因为Haskell的类型系统比go更复杂 如果有人想要创建一个新的编程语言,而他的主要任务是编译时间,那么他在词法、句法和语义分析阶段应该考虑什么?

Compiler construction 是什么导致编译器运行缓慢? 我发现GO与编译语言相比,编译速度快得多,与其他C++语言一样。我想,几乎和运行解释语言一样快。Haskell比go-to-compile慢,即使它像go一样,是用运行时和垃圾收集器编译的(对吗?)。我怀疑类型系统的复杂性是主要原因,因为Haskell的类型系统比go更复杂 如果有人想要创建一个新的编程语言,而他的主要任务是编译时间,那么他在词法、句法和语义分析阶段应该考虑什么?,compiler-construction,Compiler Construction,解析会变得相当昂贵,并且就像前面的评论者所说,如果可能的话,你希望避免重复它。这就是为什么有些语言使用模块系统而不是C风格的头文件的原因之一。与其在其他源文件中多次包含一个文件并重新解析整个过程,不如编译模块并通过某种接口导出其功能 除此之外,优化还会影响编译时间。目前,生产编译器试图将优化过程限制在优于二次复杂度的范围内,以避免缩短编译时间,但仍有很多工作要做 对于您的语言来说,用例的性能越关键,您就越希望编译器进行优化。高质量的代码生成和优化成本相对较高。使用-O0通常要快得多。要真正限制编

解析会变得相当昂贵,并且就像前面的评论者所说,如果可能的话,你希望避免重复它。这就是为什么有些语言使用模块系统而不是C风格的头文件的原因之一。与其在其他源文件中多次包含一个文件并重新解析整个过程,不如编译模块并通过某种接口导出其功能

除此之外,优化还会影响编译时间。目前,生产编译器试图将优化过程限制在优于二次复杂度的范围内,以避免缩短编译时间,但仍有很多工作要做


对于您的语言来说,用例的性能越关键,您就越希望编译器进行优化。

高质量的代码生成和优化成本相对较高。使用-O0通常要快得多。要真正限制编译时间,首先要做的事情是,任何一项都不要做两次。避免在每个编译单元的头中重新划分成千上万行。请注意,最快的编译器是汇编程序。(汇编程序将以文本形式编写的处理器指令翻译成数字。)因此,使编程语言适应这一标准毫无意义。相反,他们需要通过其他方式减少编译时间,比如关闭优化(如上所述)。补充问题: