mad*_*lao 3 c programming-languages systems-programming
我正在研究编写玩具编程语言的爱好,部分原因是对其他语言的轻微烦恼,部分原因是为了让我能够理解它是什么样的,但大多只是为了愚弄.
关于它变得非常有用的机会,我不希望它依赖于另一种编程语言的运行时来运行它编写的程序.也就是说,我希望解释器/编译器本身是一个本地编译到目标OS中的程序(语言本身可以解释/提供运行时).
除了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 稍大一些。 Ada 的某些实现具有编译指示,允许检查某些强制使用运行时的功能是否未使用(我想知道它们是否没有使用)后来标准化了,我在 90 年代末就不再遵循 Ada 标准化了),这使得它可能具有与 C 相同复杂性的最小运行时间。