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

AST or bytecode. Which is easier to optimise?

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

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

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

提前致谢。

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

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

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

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