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

What programming languages, without a runtime, besides C, are good for writing programming languages?

我正在研究一种写玩具编程语言的嗜好,一部分来自于对其他语言的小烦恼,一部分是为了让我理解它是什么样的,但主要是为了糊弄别人。

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

除了C还有别的办法吗?有哪些优点/缺点或分别使用?

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

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

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

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

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


您可以使用任何现有编译器发出本机代码而不依赖的语言。C和C++是相当好的赌注,因为它们的运行时间几乎无处不在(甚至在C中也是如此)。

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

这些工具对你的语言的用户都是有用的,显然对你自己也是有用的。

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

祝你好运:-

还要确保你去看LLVM。它是一个"编译器基础结构"。这可能是从现在开始实现一种新语言的最佳地方。文档非常好,教程包括构建一种玩具语言。


C有一个运行时…C++的运行时间比C略微大一些。艾达的一些实现有助于检查某些使用运行时间的特征没有被使用(我想知道它们是否没有标准化,我在90年底已经停止遵循艾达标准化),使得它可能具有相同的压缩性A的最小运行时间。S.


pypy使用rpython来实现Python语言。这对你有用吗?


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

网址:http://haxe.org/

网址:http://caml.inria.fr/


我认为Python最适合你。Python是一种编程语言,您可以更快地工作并更有效地集成系统。您可以学习使用python,并看到生产率和维护成本几乎立即提高。

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

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


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

当然,玩具语言需要一个运行时,例如jvm/llvm/.net clr。或者翻译。如果您不选择这些选项,您需要生成符合ABI的机器代码,这是非常痛苦的。

我建议您查看目标LLVM并从中生成机器代码,Dalvik也可能适合您的需要(因为它非常轻)。