请原谅我的无知。我正在涉足PHP,所以我觉得有必要问一个我多年来一直在思考的问题:
当你编写一种全新的编程语言时,你会用什么来写呢?
对你们程序员来说,这听起来可能真的很愚蠢,我对他们有极大的敬意,但对我来说,这是一个令人困惑的鸡和蛋的事情。你的工作是什么?对自己说,今天我要发明一门新语言!然后再发动起来。记事本?是不是所有的编译器都构建在以前存在的语言之上,以至于一个人可以把曾经设计过的所有编程语言都绘制到一个巨大的分支树上,最终在……我不知道,一些旧的东西?
以我的弱智,我觉得这很吸引人。求你教我吧!
发布于 2011-08-15 13:07:20
这不是一个愚蠢的问题。这是一个很好的问题。
正如已经回答的,简短的答案是“另一种语言”。
这就引出了一些有趣的问题?如果它是为你的特定硬件编写的第一种语言呢?对于在嵌入式设备上工作的人来说,这是一个非常现实的问题。正如已经回答的“另一台计算机上的一种语言”。事实上,一些嵌入式设备永远不会获得编译器,它们的程序将始终在不同的计算机上编译。
但你可以把它往后推更远。那么第一个编写的程序呢?
“高级语言”的第一个编译器应该是用“汇编语言”编写的。汇编语言是一种语言,该语言中的每条指令都对应于CPU的一条指令。它是一种非常低级的语言,非常冗长,编写起来非常费力。
但是即使是编写汇编语言也需要一个叫做汇编语言的程序来将汇编语言转换成“机器语言”。我们可以追溯到更远的地方。最早的汇编程序是用“机器代码”编写的。一种完全由二进制数组成的程序,这些二进制数与计算机本身的原始语言一一对应。
但它仍然不会结束。即使是一个只包含原始数字的文件也需要翻译。您仍然需要将这些原始数字保存在文件中并输入到计算机中。
信不信由你,早期的电脑前面都有一排开关。你翻转开关,直到它们代表一个二进制数,然后你点击另一个开关,将这个单一的数字加载到计算机内存中。然后你不断地切换,直到你加载了一个最小的计算机程序,可以从磁盘文件或穿孔卡片中读取程序。你轻敲另一个开关,它就启动了程序运行。当我在80年代上大学的时候,我看到计算机有这样的能力,但从来没有被分配到用开关加载程序的工作。
甚至比那更早的时候,计算机程序就必须与plug boards硬连接!
发布于 2009-10-27 17:06:47
发布于 2009-10-27 20:22:32
很多语言都是自举的--那就是written in themselves。至于为什么要这样做,使用eat your own dogfood通常是个好主意。
我提到的维基百科文章讨论了the chicken and egg问题。我想你会发现它很有趣。
https://stackoverflow.com/questions/1629513
复制相似问题