Jvm 什么是开发爱好语言的好虚拟机?

Jvm 什么是开发爱好语言的好虚拟机?,jvm,language-design,vm-implementation,osascript,parrot,Jvm,Language Design,Vm Implementation,Osascript,Parrot,我在考虑写我自己的小语言 我找到了一些选择,但请随意提出更多建议 虚拟机 鹦鹉 奥萨 很多语言都在使用JVM,但除非您编写Java语言,否则stdlib给您的所有功能都会让人觉得难看;它也不太擅长动态的东西 Parrot似乎是开发语言的好VM,但它有一点被抛弃/未完成/爱好项目的味道 OSA是Applescript的动力,并不是一个特别有名的VM,但我使用Mac,它提供了良好的系统集成 CLR+Mac似乎不是一个好的组合 我的语言将是一种面向对象的函数式并发数据流语言,具有强大的类型和Pyt

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

我找到了一些选择,但请随意提出更多建议

  • 虚拟机
  • 鹦鹉
  • 奥萨
很多语言都在使用JVM,但除非您编写Java语言,否则stdlib给您的所有功能都会让人觉得难看;它也不太擅长动态的东西

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

OSA是Applescript的动力,并不是一个特别有名的VM,但我使用Mac,它提供了良好的系统集成

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

我的语言将是一种面向对象的函数式并发数据流语言,具有强大的类型和Python和Lisp语法的混合。 听起来不错,嗯

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

  • Lua有一个小型、编写良好且快速的VM
  • PythonVM——如果您愿意,您可以将一种新语言附加到它上。或者编写(使用?)类似tinypy的东西,tinypy是PythonVM的一个小而简单的实现
以上两个选项都可以访问有用的标准库,这将节省您的工作,并且都是用相对干净和模块化的C语言编写的,因此它们应该不难连接


尽管如此,我不同意鹦鹉被抛弃/成为业余爱好。它相当成熟,有一些非常强大的开发人员在开发它。此外,它是专门为多种动态语言设计的VM。因此,is的设计考虑到了灵活性。

请看一看。它本身并不是一个纯粹的虚拟机,更像是一个具有自己的IR的框架,允许您构建高级虚拟机。有一些不错的东西,比如静态代码分析和JIT支持

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


在此过程中,我还编写了一个“deparse”模块,试图将AST转换回等效的Python源代码,以进行调试。如果您感兴趣,可以在存储库中找到代码。

您考虑过Pypy吗?据我所知,除了作为Python JIT编译器之外,它还具有处理其他语言的能力。例如,有一个例子解释了如何使用Pypy创建Brainfuck JIT编译器。

性能和可伸缩性要求如何?我宁愿使用Python或Lua,也不愿使用Scheme。几乎没有性能和可伸缩性要求,它只用于我编写的小型工具。我从Unladen swallow了解LLVM。因为我的语言只是一个爱好项目,我认为最好借用一个带有stdlib的VM。我想知道更多关于为什么你认为Lua或Python VM适合我的原因。鹦鹉可能已经成熟了,至少它上面的大多数语言都不完整或被抛弃了。@Pepijn:我已经更新了答案。不知道还有什么好建议,除非你有更具体的问题?我想传递函数和对象,比如值,我在考虑或多或少的静态类型系统,我还需要数据流的东西。Python在函数、值、表达式和语句之间有着明显的区别,但它的类型系统是动态的。这会妨碍我吗?Lua、Parrot、JVM或OSA的情况如何?@Pepijn:如果您愿意,可以在Python的VM上实现类型检查。这意味着用Python编写我的语言,不是吗?那会很有趣。。。我必须考虑一下这些限制。诚然,使用Python
ast
库肯定是最容易的。当然,你可能会比选择Python做得更糟。
ast
如何制作一个静态类型系统,特别是如何编写数据流风格的函数(数据到达后立即调用)?当然,Python ast并不是专门为通用而设计的,而是为实现Python本身所需要的功能而设计的(这是一种通用语言)。当然可以在Python上构建诸如静态类型系统和数据流函数之类的功能,因此在Python AST中也可以。这可能只是一点工作,正如在VM的直接字节码中实现这些功能将是一点工作。使用Parrot(其设计为通用)不是更容易吗?