除了C之外,没有运行时的编程语言是否适合编写编程语言?

时间:2011-04-18 11:05:51

标签: c programming-languages systems-programming

我正在研究编写玩具编程语言的爱好,部分原因是对其他语言的轻微烦恼,部分是为了让我能够理解它是什么样的,但大多只是为了愚弄。

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

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

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

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

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

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

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

6 个答案:

答案 0 :(得分:5)

您可以使用任何具有现有编译器的语言,该编译器可以发送没有依赖项的本机代码。 C和C ++是非常好的赌注,因为它们的运行时几乎可以在任何地方使用(在C中更是如此)。

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

这些工具既适用于您的语言用户,也适用于您在尝试使用该玩具语言时自己。

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

祝你好运: - )

另外请务必查看LLVM。这是一个“编译器基础设施”。这可能是最近开始实施新语言的最佳场所。文档非常好,tutorials包括构建玩具语言。

答案 1 :(得分:2)

C有一个运行时... C ++的最小运行时间比C稍微大一些.Ada的一些实现有pragma允许检查某些强制使用运行时的功能没有被使用(我想知道是否他们之后没有标准化,我已经停止在90年代后期遵循Ada标准化了,这使得它可能具有与C相同的最小运行时间。

答案 2 :(得分:1)

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

答案 3 :(得分:0)

我认为Python最适合你。 Python是一种编程语言,您可以更快地工作并更有效地集成您的系统。您可以学习使用Python,几乎可以立即获得生产力并降低维护成本。

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

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

答案 4 :(得分:0)

Haxe是用OCaml编写的,我认为这是编写其他语言的非常好的语言。

http://haxe.org/

http://caml.inria.fr/

答案 5 :(得分:-1)

如果你要编写bootloader和内核,那么C就是你的语言,否则你用什么语言来开发你的语言并不重要。仅仅因为您的宿主语言有运行时并不意味着您的目标语言必须有一个。

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

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