13

我一直在开发一个 Smalltalk 变体,只是为了好玩,我想知道在针对后端时,stackoverflowers 的伙伴会选择什么。这些是我目前的考虑:

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

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

自制口译员:不可能,因为这不好玩:-)

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

4

14 回答 14

15

不要这么快就打折 .NET 或 JVM。正在为两者开发动态语言(例如,JVM 上的 Groovy、JRuby、Jython;.NET 上的 IronRuby、IronPython)并且 .NET 正在获得“DLR”——动态语言运行时。(有关详细信息,请参阅Jim Hugunin 的博客。)

于 2008-11-04T15:13:03.890 回答
4

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

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

.Net 在 Windows 上效果最好。如果您选择它,您应该在Mono上进行测试,使其更加平台中立。

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

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

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

于 2008-11-04T15:12:16.420 回答
4

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

于 2008-11-04T15:21:31.017 回答
3

既然您正在尝试实现 Smalltalk,为什么不考虑一个受 smalltalk 启发的Ruby虚拟机,例如YARV甚至rubinius。两者都受到 smalltalk 的启发,旨在实现高性能。YARV 将成为新的标准 Ruby VM。

于 2008-11-04T15:59:33.657 回答
3

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

于 2008-11-04T16:11:30.217 回答
3

你可能想看看PyPy——虽然这个项目的存在是为了在 Python(的一个子集)中实现 Python 语言,但他们采用的方法允许多个前端和多个后端(包括 CLR、JVM、LLVM ,C,甚至 Smalltalk 和 JavaScript,我想)。例如,JIT 的工作是使用 Prolog 作为前端语言,CLR 作为后端来完成的。因此,您可能会加入实施 Smalltalk 的队伍,后来发现您也在不知不觉中帮助其他人实施 Prolog... :-)

于 2008-11-04T16:13:55.857 回答
2

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

于 2008-11-04T16:14:08.573 回答
2

如果这是为了好玩,为什么不从开源的 Squeak 代码库开始,然后对其进行修改。Smalltalk 应该有一个小的运行时间,你的有趣的小变种可以从 squeak 的引导环境开始,它几乎是微观的,并从那里建立起来。

我反对 .NET 和 JVM 的最大优势是庞大的规模。看看 Squeak 中运行时“操作系统到 smalltalk”的阻抗匹配层有多小。

有趣的项目不应该是……有趣吗?吱吱声有很多东西,务实的不是其中之一,但很有趣……绝对是。

于 2010-02-02T14:28:55.720 回答
1

JVM 作为首选。从一开始,它将允许广泛的库支持。看看这如何使 Clojure 受益。

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

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

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

于 2008-11-04T15:13:44.137 回答
1

与 .Net 相比,JVM 更稳定、有据可查,并且通常不太可能成为移动目标。此外,如果您使用开源,您更有可能找到可以帮助您的人。.Net 的人才真的很稀缺,而且大多数人都在微软工作,所以他们可能没有时间提供帮助。

于 2008-11-04T15:55:42.853 回答
0

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

于 2008-11-04T15:12:35.263 回答
0

在 .Net 上进行操作,毕竟您想这样做是为了好玩。所以让它有点挑战性。然后可以将任何发现报告给 Microsoft,以改进 DLR 及其支持的语言。

于 2008-11-04T16:03:15.707 回答
0

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

于 2008-11-04T16:16:28.257 回答
0

绝对是使用动态语言运行时的 .Net。完成后,您的对象将可供 C# 和 V.Net 用户直接使用(您打算发布一些东西?:-)

特别是,目标在 SilverLight 中的精简版 .Net 下运行,以便您获得最新的 Web 富 UI 支持。

于 2009-01-18T02:13:33.460 回答