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

标签 c optimization programming-languages compiler-optimization interpreter

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

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

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

提前致谢。

最佳答案

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

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

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

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

关于c - AST 或字节码。哪个更容易优化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51827565/

相关文章:

python - 将参数传递给 PyRun_File(***)

language-agnostic - 是否可以统一继承和参数多态的概念?

java - 与我的二十一点纸牌程序中的 NullPointerException 错误混淆

Perl 闭包和 $_

c - 键盘加速器不捕获 CTRL + A

有人可以帮我让我的大脑休息一下吗 "C Language"

javascript - Drupal 如何重新加载 javascript 文件

mysql - MySQL中的eq_ref和ref类型是什么意思解释

java - 从集合中获取一个对象而不在java中循环

c - 后台进程和挂起进程 - 在 C 中实现作业控制 Shell