程式設計語言誕生——程式設計語言的發展歷史
計算機語言的發展簡史
計算機語言總的來說分為機器語言,組合語言,高階語言三大類,而這三種語言也恰恰是計算機語言發展歷史的三個階段。
1946年2月14日,世界上第一臺計算機ENIAC誕生,使用的是最原始的穿孔卡片,這種卡片上使用的語言是隻有專家才能理解的語言,與人類語言差別極大,這種語言就稱為機器語言,機器語言是第一代計算機語言,這種語言本質桑是計算機能識別的唯一語言,人類很難理解。以後的語言就是在這個的基礎上簡化而來的。雖然後來發展的語言能讓人類直接理解但最終送入計算機的還是這種機器語言。
計算機語言發展到了第二代,出現了組合語言,組合語言用助記符代替了操作碼。用地址符號或標號代替地址碼,這樣就用符號代替了機器語言的二進位制碼。組合語言也稱為符號語言。比起機器語言,彙編大大進步了。儘管還是複雜,用起來容易出錯,但在計算機語言發展史上是機器語言向更高階語言進化的橋樑。
當計算機語言發展到了第三代的時候,就進入了”面向人類“的高階語言。高階語言是一種接近於人類使用習慣的程式設計語言。它允許用英文寫計算程式,程式中得符號和式子也與日常用的數學式子差不多。高階語言發展於上世紀50年代中葉到70年代,流行的高階語言已經開始固化在計算機記憶體中了比如basic語言。
現在,計算機語言仍然在不斷的發展,種類也相當多,比如FORTRAN語言,COBOL語言,C語言,C++,PASCAC,JAVA等等。
接下來介紹計算機語言的發展簡史,這裡的計算機語言特指可以在機器上執行的高階語言,也就是將組合語言、虛擬碼、計算語言等排除在外
1、第一個計算機語言:Fortran
Fortran l誕生於1957年,由IBM設計,是世界上第一個真正的計算機語言。
Fortran l運行於IBM 704計算機上
Fortran l支援:變數(變數名最多6個字元)、if和do語句、格式化IO
不支援:資料型別宣告、單獨編譯子程式
Fortran ll釋出於1958年,主要對Fortran l的編譯器做了 優化,並支援了單獨編譯的子程式
Fortran lV釋出於1962年,並在1966年被標準化為Fortran 66,這也是第一個Fortran的標準化版本
1978年的Fortran 77是非重要的標準化版本,這時的Fortran語言已經大量的引進了其他計算機語言的特點,例如字串處理,邏輯判斷,帶else子句的if語句等
Fortran的最新標準化版本是Fortran 2008
Fortran的設計思想是基於馮諾依曼體系結構是命令式語言的鼻祖
2、源於數學的計算機語言:Lisp
人工智慧語言IPL(information proccessing language)誕生於1956年,IPL相當於一種假想的計算機的機器語言,這種計算機是以列表處理為基礎,這有別於馮諾依曼體系結構。IPL的關鍵是證明了:基於列表處理的計算機的可行性。
1958年夏,約翰.麥卡錫在IBM研究代數表示式的微分運算時,產生了一系列對語言需求,包括:用數學函式控制流程的方法(即,遞迴和條件表示式);列表的自動分配;廢棄列表的隱士回收。這些語言需求,顯然IPL不能滿足,所以需要設計新的語言。
1958年秋,麥卡錫在MIT成立了人工智慧小組,開始著手設計這種新的列表處理語言,這最終導致1960年,Lisp的誕生。
1960年的Lisp並沒有來得及設計自己的語法就被麥卡錫的學生實現了,因為沒有語法,麥卡錫的學生就以列表格式的語法分析樹(即。S(Symbolic)表示式)作為臨時語法。但沒有想到的是隨著Lisp語法廣泛流傳,這種語法被程式設計師迅速介紹,並發現了其獨特的魅力。
麥卡錫希望Lisp的語法是數學表示式的元語言,命名為M(Mate)表示式,類似於後面的ML語言的語法。但是這種想法遭到了當時Lisp程式設計師的反對,最後麥卡錫開了MIT,從此Lisp的語法凝固在S表示式上。
Lisp建立在列表和lambda演算和基礎上,是函數語言程式設計的鼻祖。
3、通用科學計算語言: Algol
Algol 58年誕生於1958年,由蘇黎世會議制定。是第一個設具體機器無關的計算機語言。
隨著Fortran的誕生,其他一些語言也在開發中,這些語言的語法格式各不相同,而且和Fortran-樣,都與執行它們的具體計算機關聯(比如標示符長度,程式碼行數的限制等)。用這些語言寫的程式碼很難交流。於是Algol 58在Fortran 1的基礎做了擴充套件,併兼容了當時其他語言的一些特性,成為了程亨設計思想的整合。
Algol 60,發表於1960年,在Algol 58的基礎上做了重大改進:移入塊結構、支援兩種 子程式引數傳遞(按值專遞和按名傳遞)、允許遞迴、 支援本地陣列(在棧上分配陣列)。Algol 60是命令式語言的一個里程碑。
Algol在設計之初,就定下:語法應當儘可能接近數學記法,的目標。這就使得Algol 60語法格式幾乎影響到後來所有的計算機語言,並且Algol 60是很多文獻表達演算法的唯-正式方式。
Algol 60是後來所有計算機語言語法的鼻祖,但Cobol除外。
4、通用商務語言:COBOL
COBOL語言於1960年釋出,注意針對商務應用,語言的設計理念是:“數學程式應該用數學記法來寫,資料處理程式應該用英語語句來寫”。商務應用顯然屬於後者,所以COBOL語言看起了就像是全大寫的英語。
COBOL創造了一些新概念:巨集(DEFINE)和資料結構(記錄)。
COBOL在商務領域被廣泛的使用
COBOL對後來的語言幾乎沒有影響,但PL/I除外。
5、跨領域語言:PL/I
之前的所有語言都是領域特定語言,例如:人工智慧領域的Lisp、科學計算領域的Algol 60,商務應用領域的COBOL等。
PL/I誕生於1964年,是跨科學計算和商務應用領域的計算機語言。
PL/I是Algol 60、Fortran IV、COBOL的結合體
6、面向物件的起源:SIMULA 67
1964年,在挪威計算機中心誕生了SIMULA I,然後不斷的改進最終於1967年,產生了SIMULA 67.
SIMULA 67是Algol 60的擴充套件,是第一個定義類結構的語言,也被認為是面向物件的起源
將指令式程式設計中的資料和資料的有關函式整合在一起,就形成了面向物件程式設計中的物件,而物件的型別就是類。將指令式程式設計中主程式呼叫子程式的從屬關係,變為面向物件程式設計中物件之間互相傳送訊息的平等關係。
7、正交設計:Algol 68
Algol 68,發表於1968年,第一個引入正交化設計的概念,以及使用者自定義資料型別
8、初學者的語言:BASIC
BASIC語言誕生於1971年,設計的主要目的是:使得計算機語言可以被非理工科生使用(當時要工科學生使用的Fortran和Algol 60很難被文科生掌握)
這樣的設計目的使得BASIC非常適合於初學者
BASIC來自於Fortran IV,語法受到Algol 60影響,BASIC是第一個被廣泛使用的分時處理語言。
9、學院派語言:Pascal
Pascal語言誕生於1971年,來自於Algol 68
Pascal重大影響來自於程式設計教學,它的出現取代了Fortran作為程式設計入門語言的地位
Pascal在工業街也有廣泛的使用
10、系統語言:C
貝爾實驗室的UNIX作業系統,最初版本使用匯編語言寫成,並1970年,在UNIX上實現的第一個高階語言叫做B語言,B的目的是:用於開發UNIX系統程式,以及新版本的UNIX作業系統。B以BCOL語言為基礎。
BCOL,誕生於1967年劍橋大學,它的祖先是1962年誕生於同一所大學的CPL語言。
B和彙編一樣資料型別就是機器字,這極大的限制了B程式在不同位數的機器之間的遷移,B的這種不可一致性導致了C的產生。C語言就是B的改進版本,同樣以BCPL基礎,誕生引用了ALGOL 68的特點,使得C語言成為了一個可移植系統程式語言。
C語言語法中對操作符的大量靈活的使用,極大地影響了後來的一批程式語言
11、邏輯語言:Prolog
Prolog誕生於1972年,是邏輯式程式設計的鼻祖。所謂邏輯式程式設計,就是以形式邏輯的方式將計算過程傳遞給計算機
12、極簡主義:Scheme
Scheme作為一種Lisp方言,同樣誕生於MIT,時間是1975年,Scheme第一個引用詞法作用域,延續體,閉包等概念,並將資料和函式等同對待。
Scheme的簡約優美使它博得了計算機語言皇后的桂冠,並與另一個以優雅著稱的Pascal一起成為教學語言。
Scheme是函式式語言主要用於數學演算法教學,Pascal是命令式語言主要用於程式設計教學
13、Algol式語法的函式式語言:ML
ML誕生於1979年,ML開創了以Algol作為語法的函式式語言的先河
14、強型別惰性純函式式語言:Haskell
Haskell是1990年標準化Miranda語言的結果
Miranda誕生於1986年,部分基於ML語言
Haskell最大的特點就是惰性求值
15、支援面向物件的函式式語言:OCaml
Caml誕生於1996年,基於ML和Haskell
OCaml是Caml的面向物件版本,釋出於2006年
F#是基於OCaml的.NET平臺版本,釋出於2010年
16、嵌入式語言;Ada
Ada語言誕生於1980年,是嵌入式系統應用語言
Ada 83是1983年的標準化版本
1995年的Ada 95標準語言在ARM中定義
Ada最新版本是Ada 2005
Ada廣泛的應用於商務、國防航空和交通運輸等領域
17、純面嚮物件語言:Smalltalk
Smalltalk語言誕生於1980年,是第一個完全支援面向物件程式設計的語言
Smalltalk源於SIMUAL 67,完善並定義了訊息傳送,和物件的繼承關係
在Smalltalk中,所有資料都是物件:訊息的傳送者,訊息的接受者,訊息,訊息的結果,物件的型別是類,類中可定義方法,屬性等
’18、命令式面嚮物件語言:C++
C++誕生於1983年,是在C的基礎上,以SIMUAL 67的方式對指令式程式設計的面向物件擴充套件。C++的成功在於完全相容C的情況下支援了面向物件,從而使面向物件程式設計成為了指令式程式設計的一個子類,傳統的指令式程式設計被叫做面向過程編輯
因為對C的完全相容,ASNI在1989年的標準化版本C 89,合併的兩種語言,叫做C/C++
C/C++的最新是2011年釋出的C 11.引入的ambda表示式,垃圾回收等機制。
由於C/C+吸收了太多的語言特性,使得C/C++成為世界上最難精通的語言,沒有之一
C/C++是目前使用人數最多的語言,和他一直競爭的是java
19、原型面嚮物件語言:Self
Self誕生於1986年,Self源自於Smallltalk
Self對面向物件做了深入與研究,提出了“萬物皆物件”的思想,它刪除了面向物件概念中的類的概念認為類也是一種物件,訊息仍然做最基本操作,把物件的屬性理解為獲取或更改屬性這兩種方法,從而把屬性的概念簡化為方法,取消了變數和賦值,替代他們的是通過訊息來讀槽和寫槽
在Self中物件建立物件的方式是自我拷貝,所以叫做原型
Self是原型面嚮物件語言的鼻祖,就像SIMUAL 67是類面向物件語的鼻祖
20、另一個對C進行面向物件擴充套件的語言:Object-C
Object-C誕生於1983年後來被蘋果公司選中,和C++相似,也是對C的面向物件擴充套件,所不同的是C++以SIMUAL 67的面向物件為基礎,Object-C以Smalltalk的面向物件為基礎
Object-C一直伴隨著蘋果公司的作業系統一起發展,這兩年隨著IOS的開發被廣泛使用
21、對Pascal進行面向物件擴充套件的語言:Delphl
Delphl誕生於1995年,是對Pascal的面向物件擴充套件,借鑑了C/C++的經驗
22、指令碼語言:Perl
Perl釋出於1987年,Perl起源於作業系統的控制檯(shell)的命令。使用者將完成某個工作的所有命令儲存在一個sh檔案,這樣只有執行這個檔案就可完成對應功能,省去每次都要輸入所有命令的麻煩,sh檔案就叫做指令碼。
指令碼只是一些命令列,可是發展到Perl時已經是一個相當成熟的語言了
23、關聯列表函式式面向物件指令碼語言:Lua
Lua誕生於1993年,設計目的是被嵌入引用程式,成為其指令碼,Lua以其小巧性著稱
Lua基於Self和Scheme,它是第一個以關聯列表最為主要資料的函式式語言
24、虛擬機器面嚮物件語言:java
誕生於1995年的java 1.0,來自於Sun公司,是第一個在虛擬機器上執行的語言
在這之前計算機語言要麼由直譯器解釋執行原始碼(大多數命令式語言),叫做動態語言;要麼將原始碼編譯連線成實際的計算機指令之後再由計算機執行(大多數命令式語言),叫做靜態語言
java運行於JM(java虛擬機器)上,JM和直譯器的區別是:JM會將java原始碼編譯成位元組碼,然後再由JM解釋執行,由於編譯和執行過程是交錯的,座椅從外部看來就像是JM直接執行java原始碼一樣,當然也可以,實現將java原始檔編譯好,這樣JM就可以直接執行了
java 1.0是C++的簡化版本,保留了具有資料型別和類等一小半功能,刪除了結構體,泛型程式設計等一多半的功能
java 5.5支援了泛型程式設計程式設計
java是面向物件程式設計使用人數最多的語言
java的強有力競爭對手是C#
25、面向物件解釋式指令碼語言:Python
Python誕生於1989年,作者為了打發聖誕節的無趣,決心開發一個新的指令碼解釋程式,作為ABC語言的一種繼承,ABC是作者開發的教學語言 Python和Perl用於相同領域,是面向過程+面嚮物件語言
26、純面向物件解釋式指令碼語言:Ruby
Ruby誕生於1996年,作者基於對Perl和Python的不滿而設計的純面向物件指令碼語言 ruby基本等於Smalltalk+Lisp
27、Web伺服器指令碼語言:PHP
PHP誕生於1994年,是Web伺服器指令碼語言
PHP和JavaScript的語法相似,都是嵌入在HTM;中,只不過一個在伺服器端,一個在瀏覽器端
28、瀏覽器指令碼語言:JavaScript
1995年,網景公司發行的Netsape Navigator 2.0,它的指令碼語言就是js
js和java沒有任何關係,他的前身是ScriptEase
ScriptEase的誕生於1992年原名C-minus-minus,是一個足夠強大的可以替代巨集操作的指令碼語言,同時保持與C足夠的相似性,以便開發人員能很快學會
ScriptEase基於C和Self語言,支援面向過程和原型面向物件程式設計
js後來引入了Lua語言,支援以關聯列表作為資料格式的函數語言程式設計,這種關係列表就是著名的JSON
29、.NET平臺主語言:C#
C#於2000年和.NET開發平臺一起由微軟釋出
C#是.NET開發平臺的主語言,.NET開發平臺包括,執行IL語言的虛擬機器CLR,基於IL語言的公共類庫,用於編譯產生IL語言程式的高階語言,以及支援這些高階語言挨罰的編譯的基礎開發環境
30、不再基礎的BASIC:Visual Basic.NET
Quick Basic由美國微軟公司開發,1987年推出,它是BASIC的繼承者
Quick Basic是DOS下的開發語言,後來隨著WINDOW系統的推出加入了影象化設計所以新的版本改名為:Visual Basic,它是第一個支援視覺化介面設計的語言