8

最近我偶然发现了JONESFORTH,它是一个用普通汇编语言实现的 Forth 编程语言的解释器。

我觉得这个实现很有趣,因为它展示了如何用汇编语言实现一种语言,尽管我知道实现一种语言可能是一个严重的可移植性权衡。

所以我想知道是否还有其他用汇编语言实现的编程语言,其源代码仍然可用(甚至可能仍在积极开发中)?

4

5 回答 5

9

虽然可以用汇编编写语言实现,但对于大多数语言来说,出于各种原因,这样做并不是真正可取的:众所周知,汇编代码难以开发和维护,而且根据定义它不可移植。

也就是说,某些语言更容易为以下内容生成实现:

  • Brainfuck生成汇编实现非常容易

  • Forth在汇编中有许多实现,这就是为什么它被用于几个非 PC 工作站的固件中的原因。您可以在此处找到各种平台的一些汇编实现。

  • 许多BASIC解释器是用汇编语言编写的——事实上,对于 70 年代末和 80 年代初的各种家用计算机中的大多数 BASIC 实现来说,这可能是正确的。有些可以在这里找到。

于 2011-03-17T19:23:08.870 回答
7

自 1.0 以来的几个版本的Turbo Pascal都是用汇编语言编写的。这是将编辑器、编译器、调试器和已编译程序装入当时 64 KB RAM 的唯一方法,它提供了前所未有的编辑-编译-调试速度。

于 2011-03-18T14:41:12.703 回答
7

Pico Lisp 最近(过去几年)从 C 转换为 x86-64 汇编程序。这是我能想到的唯一一个例子,它是在“现代”时代进行的。有一些从汇编程序引导的旧 Lisps 仍在使用中。其实等等,最近有人用 ARM 汇编器写了一个 Scheme(http://armpit.sourceforge.net/index.html)。我不知道他们为什么会做出如此疯狂的事情,我也没有仔细研究过。当然用C写,加一些asm函数来实现call/cc之类的也是很常见的。

1980 年代的 BDS C 编译器是用 8080 汇编器编写的,并且源代码是几年前发布的,但它主要是出于历史意义。

于 2012-02-19T08:16:31.937 回答
3

最终,每种语言都在汇编器中实现,c 编译器必须以某种方式将 + 映射到汇编器指令。汇编内核中有多少语言的一部分,以及该语言本身定义了多少语言的一部分,只有很大的可变性。如果您查看 jonesforth,您会发现内核的一部分,即使在汇编文件中,实际上也是 Forth 代码,而不是汇编代码。

所以判断标准可能是主程序的语言是汇编语言还是语言本身。更重要的可能是一种语言是否需要构建另一种语言,例如 Pascal 中的 lisp 实现,使用 C 实现的 Gforth。依赖于您无法控制的编译器以及可能制定的语言标准可能是一种责任一些做法已经过时。跟上编译器中处理器的新特性,需要深入的汇编知识,无论您的编译器是自己编写的还是汇编编写的。

只要你有源,语言就不会死。所以你可以看看FIG-Forth(1980)。jonesforth 的部分灵感来自我的 ciforth,一个用于 16/32/64 位的 i86 汇编器 Forth。

I can recomment especially `` yourforth '' a Forth in assembler that I made specifically for educational purposes. It has exercises, but those are not completed yet: https://bitbucket.org/avanderhorst/yourforth

于 2015-02-09T23:06:19.373 回答
2

虽然不是纯粹在汇编中,但 luajit 的 vm 和其他一些部分是用宏汇编编写的,用于多个平台(主要是 x86),纯粹是为了它提供的速度(mike paul 可能有其他原因,但我相信这是主要的)。宏处理器也是定制的,但是使用 lua。

于 2011-03-26T12:34:44.273 回答