作者:xiubao | 来源:互联网 | 2022-12-07 19:16
所以我正在制作一个小玩具编程语言解释器,我想尝试优化代码,以便字节码稍微小一点.我不打算进行非常复杂的优化,例如循环提升,但更简单的优化,例如常量折叠.
我的问题是,首先生成AST,优化它,然后转换为字节码,或直接转换为字节码,然后尝试优化它是否更好?
如果任何人有任何示例或知道编程语言执行这些方法之一,将不胜感激.
提前致谢.
1> chqrlie..:
两种方法都是可能的.tinycc
例如,一个C编译器作为OCCC的玩具程序启动.它直接在一次传递中生成可执行代码,没有AST,但仍然在代码生成器级别执行动态优化.
另一个例子:wren是一种优雅的小脚本语言,带有没有AST的直接字节码生成器.它对字节代码执行一些优化,主要是窥视孔优化.
更高级的优化在字节代码级别是可行的,我目前正在研究一个应该很快发布的好例子,但是构建一个AST来执行更高级别的代码分析并生成更好的代码似乎更容易.
从理论角度来看,字节码和AST是相同信息的两种表示,但一种似乎比另一种更实用.