Programming languages 用汇编语言实现的程序设计语言

Programming languages 用汇编语言实现的程序设计语言,programming-languages,assembly,forth,Programming Languages,Assembly,Forth,最近我偶然发现了一个,它是用普通汇编语言实现的第四种编程语言的解释器 我觉得这个实现很有趣,因为它展示了如何用汇编语言实现一种语言,尽管我知道实现一种语言可能是一个严重的可移植性权衡 所以我想知道是否还有其他用汇编语言实现的编程语言,其源代码仍然可用(甚至可能仍在积极开发中)?虽然可以用汇编语言编写语言实现,对于大多数语言来说,由于各种原因,这样做是不可取的:众所周知,汇编代码很难开发和维护,而且根据定义,它是不可移植的 也就是说,有些语言更容易为以下对象生成实现: 这是非常容易产生一个为 在

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

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

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

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

也就是说,有些语言更容易为以下对象生成实现:

  • 这是非常容易产生一个为

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

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


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

尽管不完全在汇编中,但vm和luajit的其他部分是在宏汇编中编写的,适用于多个平台(主要是x86),纯粹是因为它提供的速度(迈克·保罗可能有其他原因,但我相信这是主要原因)。宏处理器也是使用lua定制的。

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


20世纪80年代的BDS C编译器是用8080汇编语言编写的,源代码是在几年前发布的,但它大部分是历史性的。最终,每种语言都是在汇编语言中实现的,C编译器必须以某种方式在某处将+映射到汇编指令。在汇编内核中,语言的一部分有多大,以及在语言本身中定义的语言的一部分有多大,这两者之间只有很大的差异。 如果你看一下jonesforth,你会发现内核的一部分,甚至在汇编文件中,实际上是Forth代码,而不是汇编代码

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

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


我可以特别推荐“yourforth”一个我专门为教育目的制作的Forth汇编程序。它有一些练习,但还没有完成:

我实际上想让它成为一个社区维基,但不知道怎么做,对不起,这个解决方案能做到吗?;)(1)在C语言中使用C语言或C++语言实现。(2) 编译。(3) 反汇编可执行文件。(我很难不加上“…利润!”)Forth在设计上有点独特,它是以增量方式设计的,这样您就可以在汇编中编写一组非常小的命令,然后在Forth本身中编写其余的命令。然后,通过拥有需要移植的最小集合来获得可移植性。有些Lisp也有同样的特点。第四,汇编语言的强大功能和灵活性,以及汇编语言的可读性和可维护性。提出它的可读性是一点小意思:这确实是程序员的错。PicoLisp还有一个用Java编写的参考实现。(当系统上已经没有picolisp时,也可使用该函数编译picolisp。)