我目前正在创建一种用Nim编写的编程语言。
编译器的前端已经完成,我目前坐在一个构建良好的抽象语法树 (AST) 前面,我尝试实现一个简单的解释器,在每个树节点上调用一个evaluate() 方法。这行得通,是的,我什至为函数和东西制作了环境。但是,结果证明比 python 慢 15-20 倍。Python 在虚拟机上运行,并将源程序翻译成字节码。其他语言使用 JIT 编译。这两件事都不容易实现,但对我来说真正难过的是找不到任何一本教你如何合并这两个世界的书,要么构建一个单独有用的 VM,要么构建一个编译语。
LLVM 和 GraalVM 之类的工具可以提供帮助,但同样,我不知道如何将我的 AST 链接到这些东西。
我的下一步应该是什么?即时/虚拟机?
如果 VM:关于如何将 AST 转换为字节码并为其创建 VM 的任何建议?
If JIT:你甚至如何用动态语言编译东西。例如
fun add(a, b) {
return a + b;
}
Run Code Online (Sandbox Code Playgroud)
解释器只在运行时知道 a 和 b 的类型,因此在找到之前无法编译它,但是如果将其编译为机器码,则必须知道参数,因此下一次调用发生的情况有所不同参数类型,重新编译?
我对这个遮罩有点困惑,任何照明都将不胜感激。
提前致谢!