計算機(jī)語言的發(fā)展簡史
時間:2022-05-25 19:57:01 | 來源:網(wǎng)絡(luò)營銷
時間:2022-05-25 19:57:01 來源:網(wǎng)絡(luò)營銷
計算機(jī)語言總的來說分為機(jī)器語言,匯編一語言,高級語言三大類。而這三種語言也恰恰是計算機(jī)語言發(fā)展歷史的三個階段。
1946年2月14日,世界上第一臺計算機(jī)ENIAC誕生,使用的是最原始的穿孔卡片。這種卡片上使用的語言是只有專家才能理解的語言,與人類語言差別極大,這種語言就稱為機(jī)器語言。機(jī)器語言是第一代計算機(jī)語言。這種語言本質(zhì)上是計算機(jī)能識別的唯一語言,人類很難理解。以后的語言就是在這個的基礎(chǔ)上簡化而來。雖然后來發(fā)展的語言能讓人類直接理解但最終送入計算機(jī)的還是這種機(jī)器語言。
計算機(jī)語言發(fā)展到第二代,出現(xiàn)了匯編語言。匯編語言用助記符代替了操作碼。用地址符號或標(biāo)號代替地址碼。這樣就用符號代替了機(jī)器語言的二進(jìn)制碼。匯編語言也稱為符號語言。 比起機(jī)器語言,匯編大大進(jìn)步了。盡管還是復(fù)雜,用起來容易出錯,但在計算機(jī)語言發(fā)展史上是機(jī)器語言像更高級的語言進(jìn)化的橋梁。
當(dāng)計算機(jī)語言發(fā)展到第三代時,就進(jìn)入了“面向人類”的高級語言 。高級語言是一種接近于人們使用習(xí)慣的程序設(shè)計語言。它允許用英文寫計算程序,程序中得符號和式子也與日常用的數(shù)學(xué)式子差不多。高級語言發(fā)展于上世紀(jì)50年代中葉到70年代,流行的高級語言已經(jīng)開始固化在計算機(jī)內(nèi)存里了。比如basic語言。
現(xiàn)在,計算機(jī)語言仍然在不斷的發(fā)展,種類也相當(dāng)多,比如FORTRAN語言,COBOL語言,C語言,C++,PASCAC,JAVA等等。
接下來,我就借助億企邦的平臺跟大家介紹一下計算機(jī)語言的發(fā)展簡史,這里所說的計算機(jī)語言特指可以在機(jī)器上運(yùn)行的高級語言,也就是將匯編語言、偽代碼、計算語言等排除在外。
1、第一個計算機(jī)語言:Fortran Fortran I誕生于1957年,由IBM設(shè)計,是世界上第一個真正的計算機(jī)語言。
Fortran I運(yùn)行于IBM 704計算機(jī)上。
Fortran I支持:變量(變量名最多6個字符)、If和do語句、格式化IO。
不支持:數(shù)據(jù)類型聲明、單獨(dú)編譯子程序
Fortran II 發(fā)布于1958年,主要對Fortran I的編譯器做了優(yōu)化,并支持了單獨(dú)編譯的子程序。
Fortran IV發(fā)布于1962年,并在1966年被標(biāo)準(zhǔn)化為Fortran 66,這也是第一個Fortran的標(biāo)準(zhǔn)化版本。
1978年的Fortran 77是非重要的標(biāo)準(zhǔn)化版本,這時的Fortran語言已經(jīng)大量的引進(jìn)了其他計算機(jī)語言的特點,例如字符串處理、邏輯判斷、帶else子句的if語句等。
Fortran的最新標(biāo)準(zhǔn)化版本是Fortran 2008。
Fortran的設(shè)計思想基于馮諾依曼體系結(jié)構(gòu)是命令式語言的鼻祖。
2、源于數(shù)學(xué)的計算機(jī)語言:Lisp 人工智能語言IPL(Information Processing Language)誕生于1956年。IPL相當(dāng)于一種假想的計算機(jī)的機(jī)器語言,這種計算機(jī)是以列表處理為基礎(chǔ),這有別于馮諾依曼體系結(jié)構(gòu)。IPL的關(guān)鍵是證明了:基于列表處理的計算機(jī)的可行性。
1958年夏,約翰.麥卡錫在IBM研究代數(shù)表達(dá)式的微分運(yùn)算時,產(chǎn)生了一系列對語言需求,包括:用數(shù)學(xué)函數(shù)控制流程的方法(即,遞歸和條件表達(dá)式);列表的自動分配;廢棄列表的隱士回收。這些語言需求,顯然IPL不能滿足,所以需要設(shè)計新的語言。
1958年秋,麥卡錫在MIT成立了人工智能小組,開始著手設(shè)計這種新的列表處理語言。這最終導(dǎo)致1960年,Lisp的誕生。
1960年的Lisp并沒有來得及設(shè)計自己的語法,就被麥卡錫的學(xué)生實現(xiàn)了,因為沒有語法,麥卡錫的學(xué)生就以列表格式的語法分析樹(即,S(Symbolic)表達(dá)式)作為臨時語法。 但沒有想到的是隨著Lisp語言廣泛流傳,這種語法被程序員迅速介紹,并發(fā)現(xiàn)了其獨(dú)特的魅力。
麥卡錫希望Lisp的語法是數(shù)學(xué)表達(dá)式的元語言,命名為M(Mate)表達(dá)式,類似于后面的ML語言的語法。但是這種想法遭到了當(dāng)時Lisp程序員的反對,最后麥卡錫開了MIT,從此Lisp的語法凝固在S表達(dá)式上。
Lisp建立在列表和lambda演算和基礎(chǔ)上,是函數(shù)式編程的鼻祖。
3、通用科學(xué)計算語言:Algol Algol 58年誕生于1958年,由蘇黎世會議制定。是第一個設(shè)具體機(jī)器無關(guān)的計算機(jī)語言。
隨著Fortran的誕生,其他一些語言也在開發(fā)中,這些語言的語法格式各不相同,而且和Fortran一樣,都與運(yùn)行它們的具體計算機(jī)關(guān)聯(lián)(比如標(biāo)示符長度、代碼行數(shù)的限制等)。用這些語言寫的代碼很難交流。于是Algol 58在Fortran I的基礎(chǔ)做了擴(kuò)展,并兼容了當(dāng)時其他語言的一些特性,成為了程序設(shè)計思想的集成。
Algol 60,發(fā)表于1960年,在Algol 58的基礎(chǔ)上做了重大改進(jìn):移入塊結(jié)構(gòu)、 支持兩種子程序參數(shù)傳遞(按值傳遞和按名傳遞)、允許遞歸、支持本地數(shù)組(在棧上分配數(shù)組)。Algol 60是命令式語言的一個里程碑。
Algol 在設(shè)計之初,就定下:語法應(yīng)當(dāng)盡可能接近數(shù)學(xué)記法,的目標(biāo)。這就使得Algol 60語法格式幾乎影響到后來所有的計算機(jī)語言,并且Algol 60是很多文獻(xiàn)表達(dá)算法的唯一正式方式。
Algol 60是后來所有計算機(jī)語言語法的鼻祖,但Cobol除外。
4、通用商務(wù)語言:COBOL COBOL語言于1960年發(fā)布。注意真對商務(wù)應(yīng)用。語言的設(shè)計理念是:“數(shù)學(xué)程序應(yīng)該用數(shù)學(xué)記法來寫,數(shù)據(jù)處理程序應(yīng)該用英語語句來寫”。商務(wù)應(yīng)用顯然屬于后者,所以COBOL語言看起了就像是全大寫的英語。
COBOL創(chuàng)造了一些新概念:宏(DEFINE)和數(shù)據(jù)結(jié)構(gòu)(記錄)。
COBOL在商務(wù)領(lǐng)域被廣泛的使用。
COBOL對后來的語言幾乎沒有影響,但PL/I除外。
5、跨領(lǐng)域語言:PL/I 之前的所有語言都是領(lǐng)域特定語言,例如:人工智能領(lǐng)域的Lisp、科學(xué)計算領(lǐng)域的Algol 60,商務(wù)應(yīng)用領(lǐng)域的COMBOL等。
PL/I誕生于1964年,是跨科學(xué)計算和商務(wù)應(yīng)用領(lǐng)域的計算機(jī)語言。
PL/I是Algol 60、Fortran IV、COBOL的結(jié)合體。
6、面向?qū)ο蟮钠鹪矗篠IMULA 67 1964年,在挪威計算機(jī)中心誕生了SIMULA I,然后不斷的做改進(jìn)最終于1967年,產(chǎn)生了SIMULA 67。
SIMULA 67是對Algol 60的擴(kuò)展,是第一個定義類結(jié)構(gòu)的語言,這也被認(rèn)為是面向?qū)ο蟮钠鹪础?br>
將命令式編程中的數(shù)據(jù)和數(shù)據(jù)的有關(guān)函數(shù)集成在一起,就形成了面向?qū)ο缶幊讨械膶ο?,而對象的類型就是類。將命令式編程中主程序調(diào)用子程序的從屬關(guān)系,變?yōu)槊嫦驅(qū)ο缶幊讨袑ο笾g互相發(fā)送消息的平等關(guān)系。
7、正交設(shè)計:Algol 68 Algol 68,發(fā)表于1968年,第一個引入正交化設(shè)計的概念,以及用戶自定義數(shù)據(jù)類型。
8、初學(xué)者的語言:BASIC BASIC語言誕生于1971年,設(shè)計的主要目的是:使得計算機(jī)語言可以被非理工科生使用(當(dāng)時理工科學(xué)生使用的Fortran和Algol 60很難被文科生掌握)。
這樣的設(shè)計目的使得BASIC非常適合于初學(xué)者。
BASIC來自于Fortran IV,語法受到Algol 60影響。是BASIC是第一個被廣泛使用的分時處理語言。
9、學(xué)院派語言:Pascal Pascal語言誕生于1971年,來自于Algol 68。
Pascal重大影響來自于程序設(shè)計教學(xué)。它的出現(xiàn)取代了Fortran作為程序設(shè)計入門語言的地位。
Pascal在工業(yè)界也有廣泛的使用。
10、系統(tǒng)語言:C 貝爾實驗室的UNIX操作系統(tǒng),最初版本使用匯編語言寫成,并1970年,在UNIX上實現(xiàn)的第一個高級語言叫做B語言,B的目的是:用于開發(fā)UNIX系統(tǒng)程序,以及新版本的UNIX操作系統(tǒng)。B以BCPL語言為基礎(chǔ)。
BCPL,誕生于1967劍橋大寫,它的祖先是1962年誕生誕生于同一所大學(xué)的CPL語言。
B和匯編一樣數(shù)據(jù)類型就是機(jī)器字,這極大的限制了B程序在不同位數(shù)的機(jī)器之間的遷移。B的這種不可一致性導(dǎo)致了C的產(chǎn)生。
C語言就是B的改進(jìn)版本,同樣以BCPL基礎(chǔ),誕生引入了Algol 68的特點,使得C語言稱為了一個可移植系統(tǒng)程序語言。
C語言語法中對操作符的大量靈活的使用,極大的印象了后來的一批程序語言。
11、邏輯語言:Prolog Prolog誕生于1972年,是邏輯式編程的鼻祖。所謂邏輯式編程,就是以形式邏輯的方式將計算過程傳遞給計算機(jī)。
12、極簡主義:Scheme Scheme作為一種Lisp方言,同樣誕生在MIT,時間是1975年。Scheme第一個引入詞法作用域,延續(xù)體,閉包等概念。并將數(shù)據(jù)和函數(shù)等同對待。
Scheme的簡約優(yōu)美使它博得了計算機(jī)語言皇后的桂冠,并與另一個以優(yōu)雅著稱的Pascal一起成為教學(xué)語言。
Scheme是函數(shù)式語言主要用于數(shù)學(xué)算法教學(xué),Pascal是命令式語言主要用于程序設(shè)計教學(xué)。
13、Algol式語法的函數(shù)式語言:ML ML誕生于1979年,ML開創(chuàng)了以Algol作語法的函數(shù)式語言的先河。
14、強(qiáng)類型惰性純函數(shù)式語言:Haskell Haskell是1990年標(biāo)準(zhǔn)化Miranda語言的結(jié)果。
Miranda誕生于1986年,部分基于ML語言。
Haskell最大的特點是惰性求值。
15、支持面向?qū)ο蟮暮瘮?shù)式語言:OCaml Caml誕生于1996年,基于ML和Haskell。
OCaml是Caml的面向?qū)ο蟀姹?,發(fā)布于2006年。
F#是基于OCaml的.NET平臺版本,發(fā)布于2010年。
16、嵌入式語言:Ada Ada語言誕生于1980年,是嵌入式系統(tǒng)應(yīng)用語言。
Ada 83是1983年的標(biāo)準(zhǔn)化版本。
1995年的,Ada 95標(biāo)準(zhǔn)語言在ARM中定義。
Ada的最新版本是Ada 2005。
Ada廣泛的用于商務(wù)、國防航空和交通運(yùn)輸?shù)阮I(lǐng)域。
17、純面向?qū)ο笳Z言:Smalltalk Smalltalk語言誕生于1980年,是第一個完全支持面向?qū)ο缶幊痰恼Z言。
Smalltalk源于SIMUAL 67,完善并定義了消息發(fā)送,和對象的繼承關(guān)系。
在Smalltalk中,所有數(shù)據(jù)都是對象:消息的發(fā)送者,消息的接受者,消息,消息的結(jié)果…。對象的類型是類。類中可以定義方法,屬性等。
18、命令式面向?qū)ο笳Z言:C++ C++誕生于1983年,是在C的基礎(chǔ)上,以SIMUAL 67的方式對命令式編程的面向?qū)ο髷U(kuò)展。C++的成功在于完全兼容C的情況下支持了面向?qū)ο?,從而使面向?qū)ο缶幊坛蔀榱嗣钍骄幊痰囊粋€子類,傳統(tǒng)的命令式編程被叫做面向過程編程。
因為對C的完全兼容,ASNI在1989年的標(biāo)準(zhǔn)化版本C 89,合并的兩種語言,叫做C/C++。
C/C++的最重要版本是1999年的C 99。幾乎吸收了當(dāng)時被認(rèn)為比較有效的計算機(jī)語言特性:面向過程編程、面向?qū)ο缶幊?、泛型編程、自定義操作符重載等。
C/C++的最新是2011年發(fā)布的C 11。引入的lambda表達(dá)式,垃圾回收等機(jī)制。
由于C/C++吸收了太多的語言特性,使得C/C++成為世界上最難精通的語言,沒有之一。
C/C++是目前使用人數(shù)最多的語言,和它一直競爭的是Java(具體可查看億企邦《關(guān)于C語言、C++、Java和Python這4種程序開發(fā)語言的評價》的相關(guān)介紹)。
19、原型面向?qū)ο笳Z言:Self Self誕生于1986年。Self源自于Smalltalk。
Self對面向?qū)ο笞隽松钊肱c研究,提出了“萬物皆對象”的思想。它刪除了面向?qū)ο蟾拍钪械念惖母拍钫J(rèn)為類也是一種對象;消息仍然作為最基本操作;把對象的屬性理解為獲取或更改屬性這兩種方法,從而把屬性的概念簡化為方法;取消了變量和賦值,替代它們的是通過消息來讀槽和寫槽。
在Self中對象創(chuàng)建對象的方式是自我拷貝,所以叫做原型。
Self是原型面向?qū)ο笳Z言的鼻祖,就像SIMUAL 67是類面向?qū)ο笳Z的鼻祖。
20、另一個對C進(jìn)行面向?qū)ο髷U(kuò)展的語言:Objective-C Objective-C誕生于1983年,后來被蘋果公司選中,和C++相似,也是對C的面向?qū)ο髷U(kuò)展。所不同的是C++以SIMUAL 67的面向?qū)ο鬄榛A(chǔ),Objective-C以Smalltalk的面向?qū)ο蠡A(chǔ)。
Object-C一直伴隨著蘋果公司的操作系統(tǒng)一起發(fā)展,這兩年隨著iOS的開發(fā)被廣泛使用。
21、對Pascal進(jìn)行面向?qū)ο髷U(kuò)展的語言:Delphi
Delphi誕生于1995年,是對Pascal的面向?qū)ο髷U(kuò)展,借鑒了C/C++的經(jīng)驗,但沒有像C/C++后來那樣的瘋狂變化。
22、腳本語言:Perl Perl發(fā)布于1987年。Perl起源于操作系統(tǒng)的控制臺(shell)的命令。用戶將完成某個工作的所有命令保存在一個sh文件里,這樣只要執(zhí)行這個文件就可完成對應(yīng)功能,省去每次都要輸入所有命令的麻煩。sh文件就叫做腳本。
腳本只是一些命令行,可是發(fā)展到Perl時已經(jīng)是一個相當(dāng)成熟的語言了。
23、關(guān)聯(lián)列表函數(shù)式面向?qū)ο竽_本語言:Lua Lua誕生于1993年,設(shè)計目的是嵌入引用程序,成為其腳本。Lua以其小巧性著稱。
Lua基于Self和Scheme,它是第一個以關(guān)聯(lián)列表最為主要數(shù)據(jù)的函數(shù)式語言。
24、虛擬機(jī)面向?qū)ο笳Z言:Java 誕生于1995年的Java 1.0,來自于Sun公司,是第一個在虛擬機(jī)上運(yùn)行的語言。
再這之前計算機(jī)語言要么:由解釋器解釋執(zhí)行源代碼(大多數(shù)命令式語言),叫做動態(tài)語言;要么:將源代碼編譯連接成實際的計算機(jī)指令后再由計算機(jī)執(zhí)行(大多數(shù)命令式語言),叫做靜態(tài)語言。
Java運(yùn)行于JM(Java虛擬機(jī))上,JM和解釋器的區(qū)別是:JM會將Java源代碼編譯成字節(jié)碼,然后然后再由JM解釋執(zhí)行。由于編譯和執(zhí)行過程是交錯的,所以從外部來看就像是JM直接執(zhí)行Java源代碼一樣。當(dāng)然也可以,事先將Java源文件編譯好,這樣JM就可以直接執(zhí)行了。
Java 1.0是C++的簡化版本,保留了具有數(shù)據(jù)類型和類等一小半功能,刪除了結(jié)構(gòu)體,泛型編程等一多半的功能(具體可查看億企邦《你知道Java內(nèi)部的這些事兒嗎》的相關(guān)介紹)。
Java 5.5 支持了泛型編程編程。
最新版本是2014發(fā)布的Java 8.0,支持了lambda表達(dá)式。
Java是面向?qū)ο缶幊淌褂萌藬?shù)最多的語言。(C/C++的大部分人之使用C部分,即面向過程變成)。
Java的強(qiáng)有力競爭對手是C#。
25、面向?qū)ο蠼忉屖侥_本語言:Python Python誕生于1989年,作者為了打發(fā)圣誕節(jié)的無趣,決心開發(fā)一個新的腳本解釋程序,做為 ABC語言的一種繼承。ABC是作者開發(fā)的教學(xué)語言。
Python和Perl用于相同領(lǐng)域,是面向過程+面向?qū)ο笳Z言(具體可查看億企邦《Python語言代碼的性能優(yōu)化方法大全》的相關(guān)介紹)。
26、純面向?qū)ο蠼忉屖侥_本語言:Ruby Ruby誕生于1996年,作者基于對Perl和Python的不滿而設(shè)計,的純面向?qū)ο竽_本語言。
Ruby基本等于Smalltalk + Lisp。
27、Web服務(wù)器腳本語言:PHP PHP誕生于1994年,是Web服務(wù)器腳本語言。
PHP和JavaScript的語發(fā)相似,都是嵌入在HTML中,只不過一個在服務(wù)器端,一個在瀏覽器端。
28、瀏覽器腳本語言:JavaScript 1995年,網(wǎng)景公司發(fā)行的 Netscape Navigator 2.0,它的腳步語言就是JavaScript。
JavaScript和Java沒有任何關(guān)系,它的前身是ScriptEase。
ScriptEase的誕生于1992年原名C-minus-minus,是一個足夠強(qiáng)大可以替代宏操作(macro)的腳本語言,同時保持與 C足夠的相似性,以便開發(fā)人員能很快學(xué)會。
ScriptEase基于C和Self語言,支持面向過程和原型面向?qū)ο缶幊獭?br>
JavaScript后來由引入了Lua語言,支持以關(guān)聯(lián)列表作為數(shù)據(jù)格式的函數(shù)式編程,這種關(guān)聯(lián)列表這就是著名的JSON。
最后JavaScript是一個:表面叫Java腳本,但是和Java沒有任何關(guān)系;表面上是一個像C語言一樣的面向過程語言,但實際上是一個原型面向?qū)ο笳Z言;表面上你創(chuàng)建了一個對象,但其實只是一個關(guān)聯(lián)列表;表面上你在定義變量和賦值,其實只是<鍵,值>對;表面上你聲明函數(shù),其實只是<鍵,lambda表達(dá)式>對。表面上是一個命令式編程語言,但本質(zhì)上是一個以關(guān)聯(lián)列表為數(shù)據(jù)格式的函數(shù)式編程語言。
29、.NET平臺主語言:C# C#于2000年和.NET開發(fā)平臺一起由微軟發(fā)布。
C#是.NET開發(fā)平臺的主語言。.NET開發(fā)平臺包括,運(yùn)行IL語言的虛擬機(jī)CLR,基于IL語言的公共類庫,用于編譯產(chǎn)生IL語言程序的高級語言,以及支持這些高級語言開發(fā)的編譯的基礎(chǔ)開發(fā)環(huán)境。
由于CLR和IL公共類庫作為Window操作系統(tǒng)的一部分捆綁發(fā)布,所以IL語言程序可以再Window操作系統(tǒng)上直接執(zhí)行,就行機(jī)器指令一樣。
CLR運(yùn)行IL和JM運(yùn)行Java一樣,只不過CLR將IL編譯成機(jī)器指令,然后在由計算機(jī)直接執(zhí)行,而JM是將Java編譯成字節(jié)碼,然后由解釋器解釋執(zhí)行。
.NET開發(fā)平臺支持多種語言,其中C#是主語言。
C# 1.0 基于Java和C++,以Java為基礎(chǔ)將更多的C++加入進(jìn)來,并且吸收了一些Delphi和Visual Basic的特性。
C# 2.0 引入泛型編程。
C# 4.0支持了lambda表達(dá)式,Linq等。
最新版本是2014發(fā)布的C#5.0。
.NET 4.0引入了動態(tài)類型,使得.NET平臺可以嵌入動態(tài)語言,比如:Lisp、Python、 Ruby等。
30、不再基礎(chǔ)的BASIC:Visual Basic .NET Quick BASIC由美國微軟公司開發(fā),1987年推出,它是BASIC的繼承者。
Quick BASIC是DOS下的開發(fā)語言,后來隨著Window系統(tǒng)的推出加入了圖像化設(shè)計所以新的版本改名為:Visual Basic。Visual Basic是第一個支持可視化界面設(shè)計的語言。
1998年發(fā)布的Visual Basic 6.0 是一個應(yīng)用非常廣泛的版本。
2001年,Visual Basic遷移到了.NET平臺上,改名Visual Basic .NET。Visual Basic .NET對BASIC語言特性進(jìn)行了重大改進(jìn)。從此Visual Basic .NET伴隨.NET開發(fā)平臺一起發(fā)展。
補(bǔ)充,R語言現(xiàn)在是最流行的統(tǒng)計計算語言,是S4語言的免費(fèi)版本,S語言由貝爾實驗室創(chuàng)造。R語言、3M數(shù)學(xué)計算語言(Matlab、Mathematica、Maple)、匯編語言都未列入名錄。
億企邦點評: 高級語言的發(fā)展也經(jīng)歷了從早期語言到結(jié)構(gòu)化程序設(shè)計語言,從面向過程到非過程化程序語言的過程。相應(yīng)地,軟件的開發(fā)也由最初的個體手工作坊式的封閉式生產(chǎn),發(fā)展為產(chǎn)業(yè)化、流水線式的工業(yè)化生產(chǎn)。
高級語言的下一個發(fā)展目標(biāo)是面向應(yīng)用,也就是說:只需要告訴程序你要干什么,程序就能自動生成算法,自動進(jìn)行處理,這就是非過程化的程序語言。
關(guān)鍵詞:發(fā)展,語言,計算機(jī)