5

我正在研究一种编写玩具编程语言的爱好,部分原因是对其他语言的小烦恼,部分是为了让我能理解它是什么样的,但主要是为了鬼混。

如果它变得非常有用,我不希望它依赖于另一种编程语言的运行时来运行用它编写的程序。也就是说,我希望解释器/编译器本身是一个本地编译到目标操作系统中的程序(语言本身可以被解释/提供运行时)。

除了C之外,还有其他选择吗?有哪些优点/缺点或使用它们?

澄清 1:我不打算使用足够低的级别来编写内核、文件系统、设备驱动程序、引导加载程序。但是,我希望能够管理自己的记忆。

澄清2:由于术语错误/误解,并且由于我已经习惯了在各种操作系统上运行的C运行时,我说C没有运行时/或者我对运行时不感兴趣。表达我真正想要的更好的方式是,我的程序可以本地编译到目标(桌面)操作系统中,而无需从引导语言安装其他软件。

2.1:如果我用python编写编译器/解释器,我不希望发出的可执行文件依赖于python程序。

2.2:如果我使用编译步骤,例如,使用 perl 编译程序,我不希望发出的可执行文件依赖于 libperl.dll/so。

2.3:除了运行时是 C,因为 C 运行时通常安装在几乎所有桌面操作系统上,因为许多核心操作系统工具都依赖它。

4

6 回答 6

4

您可以使用任何具有现有编译器的语言,该编译器会发出没有依赖关系的本机代码。C 和 C++ 是相当不错的选择,因为它们的运行时几乎随处可用(在 C 中更是如此)。

在您的语言构建中,一种非常值得尝试的方法是:让您的编译器输出 C(或 C++)。然后,您可以使用围绕这些语言及其运行时(链接器、对象转储器、调试器等)的所有现有生态系统,甚至计划与现有代码的集成。

这些工具对你的语言的用户都很有用,显然对你自己在试验那种玩具语言时也很有用。

一旦你的语言是“自托管的”(即你的编译器是用你自己的语言编写的),你就可以开始考虑去掉整个 C 部分并编写一个本地代码编译器,及其运行时。

祝你好运 :-)

还要确保你去看看LLVM。这是一个“编译器基础设施”。这可能是这些天开始实施新语言的最佳起点。文档非常好,教程包括构建玩具语言。

于 2011-04-18T11:46:50.793 回答
2

C 有一个运行时... C++ 的最小运行时间比 C 稍大。Ada 的一些实现有编译指示,可以检查是否没有使用强制使用运行时的某些特性(我想知道它们是否没有使用)后来标准化,我在 90 年代后期停止遵循 Ada 标准化),使其可能具有与 C 相同复杂性的最小运行时间。

于 2011-04-18T11:42:05.417 回答
1

PyPy使用 RPython 来实现 python 语言。这对你有用吗?

于 2011-04-18T11:57:47.250 回答
-1

Haxe 是用 OCaml 编写的,我认为这是一种非常适合编写其他语言的语言。

http://haxe.org/

http://caml.inria.fr/

于 2011-04-18T19:32:14.927 回答
-2

我认为 Python 最适合你。Python 是一种编程语言,您可以更快地工作并更有效地集成您的系统。您可以学习使用 Python,并在生产力和更低的维护成本方面看到几乎立竿见影的效果。

最近,Python 已被移植到 Java 和 .NET 虚拟机上。

最重要的是,Python 是免费的。

于 2011-04-18T19:25:34.190 回答
-2

如果您要编写引导加载程序和内核,那么 C 是您的语言,否则您使用哪种语言来开发您的语言并不重要。仅仅因为你的宿主语言有一个运行时并不意味着你的目标语言必须有一个。

但当然,玩具语言需要运行时,例如 JVM/LLVM/.NET CLR。或口译员。如果您不进行这些选择,则需要生成符合 ABI 的机器代码,这非常痛苦。

我建议您查看目标llvm并从那里生成机器代码,dalvik也可能满足您的需求(因为它非常轻量级)。

于 2011-04-18T11:47:58.457 回答