pav*_*kha 8 compiler-construction
我将尝试为动态语言编写编译器.对某些现有的虚拟机最好 - 我还没有(还)想要处理垃圾收集以及一个好的VM为你处理的无数其他问题.您建议使用哪些VM?
我在Linux上,所以我不知道.NET(通过Mono)是不是一个好主意.我听说Parrot对动态语言有好处,但我还没有听说过任何语言用法.我应该发明自己的吗?LLVM是否算作我应该编译的VM,还是像x86一样难?
此外,基于堆栈和基于寄存器的VM有哪些优缺点?
性能和工具支持非常重要.我将在Haskell中编写编译器,因此一个好的接口是一个加号.
JVM(Java)和CLR(.NET)似乎是两个最常见的目标,因为它们都为您处理大多数这些问题.两者都提供了相当简单的指令集.
CLR有一个优点 - 它的设计目的是从一开始就支持多种语言,并且它(IMO)稍微容易使用,特别是如果你不打算编写一种适合原始语言的语言"模具"针对该运行时的初始语言.单声道工作得很好,我不会因为它而回避CLR目标.
LLVM 为您提供了比直接 x86 汇编更好的编程模型。是的,这是低水平的。但您不必担心寄存器调度或完全优化您的输出。此外,当您仍在编写前端时,您可以利用其类型系统来捕获可能犯的错误。
也就是说,您必须开发自己的运行时层来处理语言的“动态”部分。仅就这一部分而言,我可能倾向于坚持使用 CLR。