8

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

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

  • 虚拟机
  • 鹦鹉
  • OSA

很多语言都在使用 JVM,但除非您编写类似 Java 的语言,否则 stdlib 提供给您的所有功能都会让您感到难看;它也不是很擅长动态的东西。

Parrot 似乎是一个很好的开发语言的虚拟机,但它有点被遗弃/未完成/爱好项目的味道。

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

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

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

[编辑]
我现在接受了 Python,但我想了解更多关于 OSA 和 Parrot 的信息。

4

4 回答 4

5

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

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

于 2010-01-30T11:26:47.830 回答
4

看看LLVM。它不是一个纯粹的虚拟机,更多的是一个具有自己的 IR 的框架,允许您构建高级虚拟机。有很好的东西,比如静态代码分析和 JIT 支持

于 2010-01-30T10:57:03.183 回答
2
  • Lua 有一个小型、编写良好且快速的 VM
  • Python VM——如果你愿意,你真的可以给它附加一种新的语言。或者编写(使用?)类似 tinypy 的东西,它是 Python VM 的一个小而简单的实现。

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

也就是说,我不同意鹦鹉被遗弃/爱好。它非常成熟,并且有一些非常强大的开发人员正在开发它。此外,它是专门为多种动态语言设计的虚拟机。因此,在设计时考虑了灵活性。

于 2010-01-30T10:55:17.050 回答
1

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

于 2012-06-10T00:37:20.780 回答