起初,人创造计算机。
代码是0和1。电流运行在电子元件上表示1,电流不经过电子元件表示0。
人说,要有汇编,就有了汇编。
人看汇编是好的,就用汇编来写程序,然后用编译程序编译汇编程序,使汇编程序成为机器代码,也就是0和1。最初的编译程序是用0和1写的。有了编译程序,编译程序的代码就成了汇编程序。有了编译程序,反编译程序随之诞生,反编译程序可以把机器代码转回汇编代码的样子,但不完全一样。
人说,计算机要计算数学公式,人就制造了Fortran。
Fortran使人从繁琐的汇编语言中解放了出来。
人称Fortran为高级语言。有高级语言,有汇编语言,有机器语言。这就是计算机的世界最初的样子。
在人制造计算机之前,图灵说,计算机应该是这样的,于是,图灵发明了图灵机。后世的人根据图灵的描述,制造了图灵机,它有一根长长的带子,带子可以来回运动,可以在带子上写数字和字母,也可以擦去,机器还知道如何读取带子上的内容。图灵机能只能完成简单的运算,尽管理论上可以完成很复杂的运算。尽管图灵机不那么强大,但后世的计算机能力不会超越图灵机。后世有人认为图灵机的设计太过复杂,于是发明了BrainFk语言,还有人制造了BrainFk机,可以直接运行BrainFk程序。人们普遍认为,BrainFk是图灵完备的。
图灵完备就成为检验程序设计语言是否是程序设计语言的唯一标准。
在SQL发明之后,没有人指出它是图灵完备的,所以一开始它并不是程序设计语言,后来才是。
即使LATEX是图灵完备的,人们也不当它是程序设计语言,仅仅因为功能太单一。
约翰·冯·诺依曼认为,计算机应该是这样的,有运算器,存储器,输入输出设备等,于是就发明了计算机现代的体系。现代的计算机大部分都是按照冯·诺依曼体系制造的。
不同的机器运行不同的语言,最初是这样的。
软件可以模拟硬件,硬件也能实现软件的功能。在程序设计领域是这样的。一种理论上存在的机器,很可能被人真实的制造出来。一种现实中存在的机器,也可以用软件来模拟。
邱奇发现Lambda演算是强大的,计算模型可以是这样的。约翰·麦卡锡深表认同,于是发明了LISP语言,后人则制造了LISP机,专供LISP语言运行。LISP机器是昂贵的,于是后来人们不再制造LISP机,而在冯·诺依曼体系计算机上制造了软件版的LISP解释器,最初的解释器不是用LISP语言编写的。但只要有了LISP解释器,就可以用LISP语言来写LISP解释器。这个叫自举,也就是用自己的语言写自己这种语言的解释器或编译器。通常,能自举的语言看上去更加的光鲜亮丽。理论上讲,好的语言能该自举。
人说,计算机要处理商业事务。于是COBOL语言诞生了。那个时候的计算机都很大,不是现代的微型计算机。COBOL语言就运行在大型机上。
人说,计算机要能够实现算法,程序应该井然有序,结构应该像俄罗斯套娃,层层嵌套,于是ALGOL语言诞生了。
至此,上古编程语言的四大神兽诞生了。它们分别是FORTRAN,LISP,COBOL,ALGOL。
四大神兽都修炼到了元婴期,但他们的结局各不相同。
FORTRAN紧跟时代的发展,时代有了新的概念,FORTRAN就会有,诸如结构化,面向对象,并行处理等概念。当有了新的概念出现时,人就把这种概念加入到Fortran语言中。早先的FORTRAN所有的字母都要大写,现代的Fortran只需要大写首字母。这一切,是因为当初FORTRAN的代码太多,太经典,太重要,不能抛弃,于是,Fortran就不断的进化。
LISP把本门功夫发扬光大,最初的LISP就永久闭关了。接受传承的是CommonLisp,Scheme,Clojure,EmacsLisp,AutoLisp等等。
COBOL仍然勤奋的工作在第一线,虽然是在工作,跟闭关也差不多,多数时候不需要人来维护系统。只有像“千年虫”这样的Bug出现时,才需要程序员出来维护一下。人们想替换系统中的COBOL,但因为成本太高,不得不作罢。所以COBOL依然在江湖之上。
ALGOL则散功了,用它的功力发出的光,照亮后来程序设计语言的路,它则永远消失在江湖上,但江湖上依然有它的传说。
网友评论