编写编译器; 哪个VM?

pav*_*kha 8 compiler-construction

我将尝试为动态语言编写编译器.对某些现有的虚拟机最好 - 我还没有(还)想要处理垃圾收集以及一个好的VM为你处理的无数其他问题.您建议使用哪些VM?

我在Linux上,所以我不知道.NET(通过Mono)是不是一个好主意.我听说Parrot对动态语言有好处,但我还没有听说过任何语言用法.我应该发明自己的吗?LLVM是否算作我应该编译的VM,还是像x86一样难?

此外,基于堆栈和基于寄存器的VM有哪些优缺点?

性能和工具支持非常重要.我将在Haskell中编写编译器,因此一个好的接口是一个加号.

Ree*_*sey 9

JVM(Java)和CLR(.NET)似乎是两个最常见的目标,因为它们都为您处理大多数这些问题.两者都提供了相当简单的指令集.

CLR有一个优点 - 它的设计目的是从一开始就支持多种语言,并且它(IMO)稍微容易使用,特别是如果你不打算编写一种适合原始语言的语言"模具"针对该运行时的初始语言.单声道工作得很好,我不会因为它而回避CLR目标.

  • @pavpanchekha:CLR并不是专门为C#设计的 - 它从一开始就考虑到了其他语言(如VB.NET).使用DLR,它甚至更好 - 请参阅IronPython,IronRuby,VB.NET,C#以及所有语言:http://en.wikipedia.org/wiki/Microsoft_.NET_Languages (2认同)
  • 这就是我说 CLR 在这里有一些优势的主要原因 - 它从第一天起就被设计为“语言中立” - JVM 可以这样做,它从一开始就是为 Java 设计的...... (2认同)

Kar*_*tan 5

LLVM 为您提供了比直接 x86 汇编更好的编程模型。是的,这是低水平的。但您不必担心寄存器调度或完全优化您的输出。此外,当您仍在编写前端时,您可以利用其类型系统来捕获可能犯的错误。

也就是说,您必须开发自己的运行时层来处理语言的“动态”部分。仅就这一部分而言,我可能倾向于坚持使用 CLR。