最近我偶然发现JONESFORTH,它是以普通汇编语言实现的Forth编程语言的解释器。
我发现这个实现很有趣,因为它显示了如何用汇编语言实现一种语言,尽管我理解实现一种语言可能是一种严重的可移植性权衡。
所以我想知道是否有其他编程语言用汇编语言实现,其源代码仍然可用(甚至可能仍在积极开发中)?
答案 0 :(得分:7)
虽然可能在汇编语言中编写语言实现,但对于大多数语言来说,出于各种原因这样做是不可取的:组装代码非常难以开发和维护,并且根据定义,它不可移植。
也就是说,某些语言更容易产生实现:
答案 1 :(得分:7)
自1.0 Turbo Pascal以来were written in assembly language的多个版本。这是将编辑器,编译器,调试器和编译后的程序装入64 KB RAM的唯一方法,它提供了前所未见的超快编辑 - 编译 - 调试速度。
答案 2 :(得分:6)
Pico Lisp最近(在过去几年中)从C转换为x86-64汇编程序。这是我能想到的唯一一个在“现代”时代进行的例子。还有一些从汇编程序引导的旧Lisps仍在使用中。实际上等了,最近有人在ARM汇编程序中编写了一个Scheme(http://armpit.sourceforge.net/index.html)。我不知道为什么他们会做这样一个疯狂的事情,我没有密切关注它。当然,用C语言编写并添加一些asm函数来实现call / cc等是很常见的。
20世纪80年代的BDS C编译器是用8080汇编语言编写的,源代码几年前发布,但它主要是历史兴趣。
答案 3 :(得分:2)
虽然不是纯粹在汇编中,但vua和luajit的其他部分是用宏组装编写的,用于多个平台(主要是x86),纯粹是为了它提供的速度(迈克保罗可能有其他原因,但我相信这是主要的一个)。宏处理器也是自定义构建的,但是使用lua。
答案 4 :(得分:2)
最终每种语言都是用汇编程序实现的,c编译器必须将+映射到汇编程序指令,不知何故,某处。汇编器内核中语言的一部分有多大,而且语言本身定义了大部分语言,这种差异很大。 如果你看看jonesforth,你会看到内核的一部分,即使在汇编程序文件中,实际上是Forth代码,而不是汇编代码。
因此,标准可能是主程序的语言是汇编程序还是语言本身。更重要的可能是语言是否需要构建另一种语言,例如Pascal中的lisp实现,Gforth使用C实现。依赖于您无法控制的编译器以及可能使某些实践过时的语言标准可能是一种责任。在编译器中跟上处理器的新功能,需要深入的汇编知识,无论您的编译器是自编还是汇编。
只要你有源语言,语言就不会死。所以你可以看看FIG-Forth(1980)。 jonesforth的部分灵感来自于我的ciforth,i86汇编程序Forth for 16/32/64 bits。
我可以特别推荐``你的''我专门为教育目的而制作的汇编程序。它有练习,但尚未完成:https://bitbucket.org/avanderhorst/yourforth