源代码可以直接转换为机器代码(100000)。那么为什么我们需要将其转换为IR(中间表示)汇编语言?
如果我不能直接转换成机器语言,有什么优点和缺点?
答案 0 :(得分:3)
那为什么我们需要将其转换为IR(中间表示)汇编语言?
你没有。
存在IR的文本表示形式,用于调试编译器内部。 (编译器通常会通过一些内部表示形式(通常为SSA的某种形式进行转换,同时将程序的逻辑优化为有效的asm,然后再转换为机器代码。)请参见Disable all optimization options in GCC。
特别是对于LLVM,IR作为与平台无关的类似于asm的语言非常有用,可用于JIT编译。您的便携式应用程序可以生成LLVM-IR,并将其提供给LLVM,以针对运行于任何平台上的 optimize 机器码。
或者对于一种新语言的提前编译器,这意味着您不必编写针对每种可能的平台而从源代码直接转换为机器代码的优化编译器。因此,您可以移植到多个目标,最重要的是,您可以获得优化的后端,而只需要编写发出简单未经优化的LLVM-IR的前端即可。
编写 optimizing 编译器很困难,但是如果您希望任何人将其用于实际工作,则至少必须进行某种程度的优化的机器代码。参见Why are there so few C compilers?
TL:DR;通过IR,可以将一个优化的后端用于不同语言的许多前端。