起初,人創造計算機。
代碼是0和1。電流運行在電子元件上表示1,電流不經過電子元件表示0。
人說,要有匯編,就有了匯編。
人看匯編是好的,就用匯編來寫程序,然后用編譯程序編譯匯編程序,使匯編程序成為機器代碼,也就是0和1。最初的編譯程序是用0和1寫的。有了編譯程序,編譯程序的代碼就成了匯編程序。有了編譯程序,反編譯程序隨之誕生,反編譯程序可以把機器代碼轉回匯編代碼的樣子,但不完全一樣。
人說,計算機要計算數學公式,人就制造了Fortran。
Fortran使人從繁瑣的匯編語言中解放了出來。
人稱Fortran為高級語言。有高級語言,有匯編語言,有機器語言。這就是計算機的世界最初的樣子。
在人制造計算機之前,圖靈說,計算機應該是這樣的,于是,圖靈發明了圖靈機。后世的人根據圖靈的描述,制造了圖靈機,它有一根長長的帶子,帶子可以來回運動,可以在帶子上寫數字和字母,也可以擦去,機器還知道如何讀取帶子上的內容。圖靈機能只能完成簡單的運算,盡管理論上可以完成很復雜的運算。盡管圖靈機不那么強大,但后世的計算機能力不會超越圖靈機。后世有人認為圖靈機的設計太過復雜,于是發明了BrainFk語言,還有人制造了BrainFk機,可以直接運行BrainFk程序。人們普遍認為,BrainFk是圖靈完備的。
圖靈完備就成為檢驗程序設計語言是否是程序設計語言的唯一標準。
在SQL發明之后,沒有人指出它是圖靈完備的,所以一開始它并不是程序設計語言,后來才是。
即使LATEX是圖靈完備的,人們也不當它是程序設計語言,僅僅因為功能太單一。
約翰·馮·諾依曼認為,計算機應該是這樣的,有運算器,存儲器,輸入輸出設備等,于是就發明了計算機現代的體系?,F代的計算機大部分都是按照馮·諾依曼體系制造的。
不同的機器運行不同的語言,最初是這樣的。
軟件可以模擬硬件,硬件也能實現軟件的功能。在程序設計領域是這樣的。一種理論上存在的機器,很可能被人真實的制造出來。一種現實中存在的機器,也可以用軟件來模擬。
邱奇發現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則散功了,用它的功力發出的光,照亮后來程序設計語言的路,它則永遠消失在江湖上,但江湖上依然有它的傳說。