单通道编译器中间表示?
Single Pass Compiler Intermediate Representation?
我一直在阅读龙之书,我想知道单程编译器,所以如果我弄错了请纠正我,但随着编译器进行分析,它会生成越来越准确的中间表示,或者也许accurate 不是这个词,也许 optimal 是一个更好的术语,无论如何。单通道编译器每个阶段只经过一次,有时会将多个阶段组合到一个通道中,这是否意味着中间表示将不是最优的?我确定我对这个问题的思考方式有问题,所以请随时纠正我所做的任何错误假设(或者只是让我知道这个问题有多愚蠢,无论哪种方式)。
此外,如果中间表示没有受到影响,那么如果它们导致编译时间变慢,我们为什么要使用多通道编译器?
一个single pass compiler直接一次性生成最终结果。根本没有中间表示。因为这变得太复杂(无法实施、理解和维护)或太天真(没有优化),我们有多通道编译器。
维基百科指出
One-pass compilers are unable to generate as efficient programs as multi-pass compilers due to the limited scope of available information. Many effective compiler optimizations require multiple passes over a basic block, loop (especially nested loops), subroutine, or entire module. Some require passes over an entire program. Some programming languages simply cannot be compiled in a single pass, as a result of their design.
我一直在阅读龙之书,我想知道单程编译器,所以如果我弄错了请纠正我,但随着编译器进行分析,它会生成越来越准确的中间表示,或者也许accurate 不是这个词,也许 optimal 是一个更好的术语,无论如何。单通道编译器每个阶段只经过一次,有时会将多个阶段组合到一个通道中,这是否意味着中间表示将不是最优的?我确定我对这个问题的思考方式有问题,所以请随时纠正我所做的任何错误假设(或者只是让我知道这个问题有多愚蠢,无论哪种方式)。
此外,如果中间表示没有受到影响,那么如果它们导致编译时间变慢,我们为什么要使用多通道编译器?
一个single pass compiler直接一次性生成最终结果。根本没有中间表示。因为这变得太复杂(无法实施、理解和维护)或太天真(没有优化),我们有多通道编译器。
维基百科指出
One-pass compilers are unable to generate as efficient programs as multi-pass compilers due to the limited scope of available information. Many effective compiler optimizations require multiple passes over a basic block, loop (especially nested loops), subroutine, or entire module. Some require passes over an entire program. Some programming languages simply cannot be compiled in a single pass, as a result of their design.