C语言 AST 或字节码.哪个更容易优化?



所以我正在制作一个小玩具编程语言解释器,我想尝试优化代码,使字节码稍微小一点。我不打算做非常复杂的优化,比如环形吊装,而是更简单的优化,比如不断折叠。

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

如果有人有任何示例或知道执行这些方法的编程语言,将不胜感激。

提前谢谢。

这两种方法都是可能的。 例如,tinycc是一个C编译器,它最初是作为OCCC的玩具程序开始的。它直接一次性生成可执行代码,没有 AST,但仍在代码生成器级别执行动态优化。

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

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

从理论角度来看,字节码和AST是相同信息的两种表示形式,但一个似乎比另一个更实用。

最新更新