AST 或字节码。哪个更容易优化?
AST or bytecode. Which is easier to optimise?
所以我正在制作一个小玩具编程语言解释器,我想尝试优化代码,使字节码稍微小一些。我不想做非常复杂的优化,比如循环提升,而是更简单的优化,比如常量折叠。
我的问题是,是先生成一个 AST,对其进行优化,然后转换为字节码,还是直接转换为字节码,然后尝试对其进行优化更好?
如果有人有任何示例或知道执行这些方法中的任何一种的编程语言,将不胜感激。
提前致谢。
两种方法都可以。 tinycc
例如是一个 C 编译器,最初是作为 OCCC 的玩具程序。它一次性直接生成可执行代码,没有 AST,但仍然在代码生成器级别执行动态优化。
另一个例子:wren 是一种优雅的小型脚本语言,带有直接的字节代码生成器,没有 AST。它对字节码进行了一些优化,主要是窥孔优化。
更高级的优化在字节码级别是可行的,我目前正在研究一个应该很快发布的好例子,但是构建一个 AST 来执行更高级别的代码分析并生成代码似乎更容易更好的代码。
从理论上讲,字节码和AST是同一信息的2种表示,但一种似乎比另一种更实用。
所以我正在制作一个小玩具编程语言解释器,我想尝试优化代码,使字节码稍微小一些。我不想做非常复杂的优化,比如循环提升,而是更简单的优化,比如常量折叠。
我的问题是,是先生成一个 AST,对其进行优化,然后转换为字节码,还是直接转换为字节码,然后尝试对其进行优化更好?
如果有人有任何示例或知道执行这些方法中的任何一种的编程语言,将不胜感激。
提前致谢。
两种方法都可以。 tinycc
例如是一个 C 编译器,最初是作为 OCCC 的玩具程序。它一次性直接生成可执行代码,没有 AST,但仍然在代码生成器级别执行动态优化。
另一个例子:wren 是一种优雅的小型脚本语言,带有直接的字节代码生成器,没有 AST。它对字节码进行了一些优化,主要是窥孔优化。
更高级的优化在字节码级别是可行的,我目前正在研究一个应该很快发布的好例子,但是构建一个 AST 来执行更高级别的代码分析并生成代码似乎更容易更好的代码。
从理论上讲,字节码和AST是同一信息的2种表示,但一种似乎比另一种更实用。