我正在涉足 PHP 并让我的脚湿透了浏览 SO,并且觉得有必要问一个我多年来一直想知道的问题:
当您编写一种全新的编程语言时,您会用什么来编写它 ?
对我来说,这是一个令人困惑的鸡和蛋的事情。你做什么工作?对自己说 今天我要发明一种新语言! 然后开火。记事本?是否所有编译器都建立在先前存在的语言上,这样一个令人费心的编译器可以将所有编程语言绘制到一个巨大的分支树上,最终扎根于......我不知道,有些 旧的东西?
这不是一个愚蠢的问题。这是一个很好的问题。
正如已经回答的那样,简短的回答是“另一种语言”。
那么这会导致一些有趣的问题吗?如果它是为您的特定硬件编写的第一种语言怎么办?对于在嵌入式设备上工作的人来说,这是一个非常现实的问题。正如已经回答的“另一台计算机上的语言”。事实上,一些嵌入式设备永远不会得到编译器,它们的程序总是在不同的计算机上编译。
但是你可以把它推得更远。曾经编写的第一个程序怎么样?
好吧,“高级语言”的第一个编译器将用所谓的“汇编语言”编写。汇编语言是一种语言,其中语言中的每条指令对应于 CPU 的一条指令。它的语言非常低级,写起来非常冗长且劳动强度大。
但是即使编写汇编语言也需要一个称为汇编程序的程序将汇编语言转换为“机器语言”。我们再往前走。最早的汇编程序是用“机器代码”编写的。完全由二进制数组成的程序,与计算机本身的原始语言直接一一对应。
但它仍然没有结束。 即使 是只有原始数字的文件也需要翻译。您仍然需要将文件中的这些原始数字输入计算机。
不管你信不信,早期的计算机前面有一排开关。你拨动开关,直到它们代表一个二进制数,然后你拨动另一个开关,然后将那个单一的数字加载到计算机内存中。然后你一直在轻弹切换,直到你加载了一个可以从磁盘文件或穿孔卡片中读取程序的最小计算机程序。你轻弹了另一个开关,它开始运行程序。当我在 80 年代上大学时,我看到了具有这种能力但从未被赋予使用开关加载程序的工作的计算机。
甚至在此之前,计算机程序必须与插板硬连线!