AST或字节码。哪个更容易优化?

时间:2018-08-13 17:21:43

标签: c optimization programming-languages compiler-optimization interpreter

因此,我正在制作一个小小的玩具编程语言解释器,并且我想尝试并优化代码,以使字节码略小一些。我不是要进行非常复杂的优化(例如环路提升),而是要进行更简单的优化(例如恒定折叠)。

我的问题是,首先生成一个AST,对其进行优化,然后转换为字节码,还是直接转换为字节码,然后尝试对其进行优化,是否更好?

如果任何人有使用这些方法之一的示例或编程语言的知识,将不胜感激。

谢谢。

1 个答案:

答案 0 :(得分:5)

两种方法都是可能的。例如,tinycc是一个C编译器,最初是作为OCCC的玩具程序启动的。它可以一次生成直接的可执行代码,而无需AST,但是仍然可以在代码生成器级别进行即时优化。

另一个示例:wren是一种优雅的小型脚本语言,具有不带AST的直接字节码生成器。它对字节码进行了一些优化,主要是对窥孔的优化。

更高级的优化在字节码级别上是可行的,并且我目前正在研究一个很好的示例,该示例应尽快发布,但是构造AST来执行更高级别的代码分析并生成更好的似乎更容易。代码。

从理论上讲,字节码和AST是相同信息的2种表示形式,但一种似乎比另一种更为实用。