新动态编程语言的后端选择?

时间:2008-11-04 15:08:29

标签: compiler-construction interpreter smalltalk vm-implementation

我一直在开发一个Smalltalk变种,只是为了它的乐趣,我想知道当涉及到后端时,什么是stackoverflowers的选择。这些是我目前的考虑因素:

.NET,JVM:这两个VM主要用于静态类型语言,我认为很难定位像smalltalk这样的动态语言。

Python(作为源代码):似乎是最简单的方法。另外,如果我可以发出Python字节码会更好,但它没有被很好地记录为其他VM的AFAIK(需要挖掘Python的源代码以获取详细信息!)。

自制翻译:不可能,因为它没有乐趣: - )

LLVM,NekoVM,Parrot是我正在检查的其他选项。你对此有何看法?

14 个答案:

答案 0 :(得分:15)

不要这么快地折扣.NET或JVM。正在为两者开发动态语言(例如,Groovy,JRuby,JVM上的JVM; IronRuby,.NET上的IronPython),.NET正在获得“DLR” - 动态语言运行时。 (有关详细信息,请参阅Jim Hugunin's blog。)

答案 1 :(得分:4)

我会选择JVM,但主要是因为我对它很熟悉。

JVM的客观原因是:支持主平台,许多库和良好的性能(在您给出的选择中可能具有最佳性能)。

.Net在Windows上效果最佳。如果你选择它,你应该在Mono上测试更加平台中立。

Python似乎也是一个不错的选择。但我认为对于JVM,可以使用更多的库。

Parrot在我看来太新鲜了,需要一些时间才能成熟。但是对未来来说是一个有趣的选择。

其他选择对我来说是新的,我会看看它们。

答案 2 :(得分:4)

Parrot真的很酷,即使他们还没有发送任何“真正的”代码。但是因为这个项目只是为了好玩,所以不应该阻止你:D。

答案 3 :(得分:3)

由于您正在尝试实施Smalltalk,为什么不考虑Ruby之类的YARVrubinius之类的受小型启发的虚拟机。两者都是小型的,旨在实现高性能。 YARV将成为新的标准Ruby VM。

答案 4 :(得分:3)

使用Parrot的一个优点是它附带了大量的示例语言,包括名为ChitChat的Smalltalk变种。因此,您可以将其用作参考,以了解其他人如何在Parrot上实现类似的语言。

答案 5 :(得分:3)

你可能想看一下PyPy - 虽然这个项目存在于Python(的一个子集)中实现Python语言,但他们采用的方法允许多个前端和多个后端(包括CLR,JVM,LLVM,C,甚至是Smalltalk和JavaScript,我认为)。例如,work on the JIT使用Prolog作为前端语言,CLR作为后端。所以你可以参加派对来实现Smalltalk,后来发现你也帮助其他人实现Prolog而不知道它......: - )

答案 6 :(得分:2)

因子(http://factorcode.org/)可能会为此提供一些有用的功能。

答案 7 :(得分:2)

如果这很有趣,为什么不从Squeak的代码库开始,它是开源的,并修改它。 Smalltalk应该有一个小的运行时间,而你的小型有趣变体可以从吱吱声引导环境开始,这几乎是微观的,并从那里建立起来。

我对.NET和JVM的重要作用是庞大的规模。看看运行时“操作系统到smalltalk”阻塞匹配层的小小是在Squeak中。

不应该有趣的项目,好吧......有趣吗?吱吱声是很多事情,有条不紊的不是其中之一,但很有趣......肯定。

答案 8 :(得分:1)

JVM作为首选。它将允许从第一天开始提供广泛的图书馆支持。看看这对Clojure有何益处。

此外,LLVM可能是一个有趣的选择,但我不确定它是如何“证明”的,因为我无法使用LLVM后端进行成熟的语言实现。

我会避免使用.NET。这将使得围绕您的新语言收集社区和支持变得更加困难,并且您很快就会需要它。此外,它不是跨平台的。

无论你选择什么,你都会学到很多东西。

答案 9 :(得分:1)

JVM更稳定,记录良好,并且通常不太可能成为移动目标而不是.Net 如果你去开源,你也更有可能找到可以帮助你的人。 .Net人才非常稀缺,而且大部分都是为微软工作的,所以他们不太可能有时间帮忙。

答案 10 :(得分:0)

.NET作为DLR,现在位于动态语言的CLR之上。

答案 11 :(得分:0)

在.Net上做,毕竟你想做的就是为了好玩。所以让它有点挑战。然后可以向Microsoft报告任何调查结果,以改进DLR及其支持的语言。

答案 12 :(得分:0)

如果您打算使用.Net,请查看Beautiful Code - 其中有一篇关于在.Net CLR上执行动态代码生成的文章。

答案 13 :(得分:0)

绝对.Net使用动态语言运行时。 C#和V.Net用户在您完成时( 打算发货的东西?: - )

可以直接使用您的对象

特别是,目标在SilverLight中以简化的.Net运行,因此您可以获得最新的Web丰富UI支持。