什么是开发爱好语言的好VM?

时间:2010-01-30 10:52:48

标签: jvm language-design vm-implementation osascript parrot

我正在考虑写自己的小语言。

我找到了一些选项,但可以随意提出更多建议。

  • JVM
  • 鹦鹉
  • OSA

许多语言都在使用JVM,但除非你编写一个Java-ish语言,否则stdlib给你的所有功能都会让你感到难过;它在动态的东西上也不是很好。

Parrot似乎是开发语言的好VM,但它有一点废弃/未完成/爱好的项目气味。

OSA是Applescript的推动力,而不是一个特别知名的虚拟机,但我使用的是Mac,它提供了良好的系统集成。

CLR + Mac似乎不是一个很好的组合...

我的语言将成为面向对象的功能并发数据流语言,具有强类型和Python和Lisp语法的混合。 听起来不错,嗯?

[编辑]
我现在接受了Python,但我想更多地了解OSA和Parrot。

4 个答案:

答案 0 :(得分:5)

我玩过的一种方法是使用Python ast模块构建一个表示要运行的代码的抽象语法树。 Python compile函数可以将AST编译为Python字节码,然后可以运行exec。这比直接生成字节码要高一些,但是你必须处理一些Python语言的怪癖(例如,语句和表达式之间的根本区别)。

在执行此操作时,我还编写了一个“deparse”模块,该模块尝试将AST转换回等效的Python源代码,仅用于调试。如果您有兴趣,可以在psil存储库中找到代码。

答案 1 :(得分:4)

看看LLVM。它不是一个纯粹的虚拟机,更像是一个拥有自己的红外线的框架,可以让你构建高级虚拟机。有很好的东西,如静态代码分析和JIT支持

答案 2 :(得分:2)

  • Lua有一个小巧,写得很好且速度很快的VM
  • Python VM - 如果需要,您可以真正为其添加新语言。或者写(使用?)类似于tinypy的东西,这是一个小而简单的Python VM实现。

上述两个选项都可以访问有用的标准库,这些库可以节省您的工作,并且使用相对干净且模块化的C进行编码,因此它们不应该很难连接。

那就是说,我不同意Parrot被遗弃/爱好。它已经非常成熟,并且有一些非常强大的开发人员正在开发它。此外,它特别是一个旨在成为多种动态语言目标的VM。因此,设计时考虑到了灵活性。

答案 3 :(得分:1)

你考虑过Pypy吗?根据我的阅读,除了作为Python JIT编译器之外,它还具有处理其他语言的能力。例如,a tutorial解释了如何使用Pypy创建Brainfuck JIT编译器。