計算機語言的發展簡史

計算機語言簡史html

----轉自馬海洋博客程序員

計算機語言總的來講分爲機器語言,彙編一語言,高級語言三大類。而這三種語言也偏偏是計算機語言發展歷史的三個階段。算法

1946年2月14日,世界上第一臺計算機ENIAC誕生,使用的是最原始的穿孔卡片。這種卡片上使用的語言是隻有專家才能理解的語言,與人類語言差異極大,這種語言就稱爲機器語言。機器語言是第一代計算機語言。這種語言本質上是計算機能識別的惟一語言,人類很難理解。之後的語言就是在這個的基礎上簡化而來。雖而後來發展的語言能讓人類直接理解但最終送入計算機的仍是這種機器語言。shell

計算機語言發展到第二代,出現了彙編語言。彙編語言用助記符代替了操做碼。用地址符號或標號代替地址碼。這樣就用符號代替了機器語言的二進制碼。彙編語言也稱爲符號語言。 比起機器語言,彙編大大進步了。儘管仍是複雜,用起來容易出錯,但在計算機語言發展史上是機器語言像更高級的語言進化的橋樑。編程

當計算機語言發展到第三代時,就進入了「面向人類」的高級語言 。高級語言是一種接近於人們使用習慣的程序設計語言。它容許用英文寫計算程序,程序中得符號和式子也與平常用的數學式子差很少。高級語言發展於上世紀50年代中葉到70年代,流行的高級語言已經開始固化在計算機內存裏了。好比basic語言。數組

如今,計算機語言仍然在不斷的發展,種類也至關多,好比FORTRAN語言,COBOL語言,C語言,C++,PASCAC,JAVA等等。瀏覽器

 

接下來,我就藉助馬海祥博客的平臺跟你們介紹一下計算機語言的發展簡史,這裏所說的計算機語言特指能夠在機器上運行的高級語言,也就是將彙編語言、僞代碼、計算語言等排除在外。性能優化

一、第一個計算機語言:Fortran服務器

Fortran I誕生於1957年,由IBM設計,是世界上第一個真正的計算機語言。數據結構

Fortran I運行於IBM 704計算機上。

Fortran I支持:變量(變量名最多6個字符)、If和do語句、格式化IO。

不支持:數據類型聲明、單獨編譯子程序

Fortran II 發佈於1958年,主要對Fortran I的編譯器作了優化,並支持了單獨編譯的子程序。

Fortran IV發佈於1962年,並在1966年被標準化爲Fortran 66,這也是第一個Fortran的標準化版本。

1978年的Fortran 77是非重要的標準化版本,這時的Fortran語言已經大量的引進了其餘計算機語言的特色,例如字符串處理、邏輯判斷、帶else子句的if語句等。

Fortran的最新標準化版本是Fortran 2008。

Fortran的設計思想基於馮諾依曼體系結構是命令式語言的鼻祖。

二、源於數學的計算機語言:Lisp

人工智能語言IPL(Information Processing 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演算和基礎上,是函數式編程的鼻祖。

三、通用科學計算語言:Algol

Algol 58年誕生於1958年,由蘇黎世會議制定。是第一個設具體機器無關的計算機語言。

隨着Fortran的誕生,其餘一些語言也在開發中,這些語言的語法格式各不相同,並且和Fortran同樣,都與運行它們的具體計算機關聯(好比標示符長度、代碼行數的限制等)。用這些語言寫的代碼很難交流。因而Algol 58在Fortran I的基礎作了擴展,併兼容了當時其餘語言的一些特性,成爲了程序設計思想的集成。

Algol 60,發表於1960年,在Algol 58的基礎上作了重大改進:移入塊結構、 支持兩種子程序參數傳遞(按值傳遞和按名傳遞)、容許遞歸、支持本地數組(在棧上分配數組)。Algol 60是命令式語言的一個里程碑。

Algol 在設計之初,就定下:語法應當儘量接近數學記法,的目標。這就使得Algol 60語法格式幾乎影響到後來全部的計算機語言,而且Algol 60是不少文獻表達算法的惟一正式方式。

Algol 60是後來全部計算機語言語法的鼻祖,但Cobol除外。

四、通用商務語言:COBOL

COBOL語言於1960年發佈。注意真對商務應用。語言的設計理念是:「數學程序應該用數學記法來寫,數據處理程序應該用英語語句來寫」。商務應用顯然屬於後者,因此COBOL語言看起了就像是全大寫的英語。

COBOL創造了一些新概念:宏(DEFINE)和數據結構(記錄)。

COBOL在商務領域被普遍的使用。

COBOL對後來的語言幾乎沒有影響,但PL/I除外。

五、跨領域語言:PL/I

以前的全部語言都是領域特定語言,例如:人工智能領域的Lisp、科學計算領域的Algol 60,商務應用領域的COMBOL等。

PL/I誕生於1964年,是跨科學計算和商務應用領域的計算機語言。

PL/I是Algol 60、Fortran IV、COBOL的結合體。

六、面向對象的起源:SIMULA 67

1964年,在挪威計算機中心誕生了SIMULA I,而後不斷的作改進最終於1967年,產生了SIMULA 67。

SIMULA 67是對Algol 60的擴展,是第一個定義類結構的語言,這也被認爲是面向對象的起源。

將命令式編程中的數據和數據的有關函數集成在一塊兒,就造成了面向對象編程中的對象,而對象的類型就是類。將命令式編程中主程序調用子程序的從屬關係,變爲面向對象編程中對象之間互相發送消息的平等關係。

七、正交設計:Algol 68

Algol 68,發表於1968年,第一個引入正交化設計的概念,以及用戶自定義數據類型。

八、初學者的語言:BASIC

BASIC語言誕生於1971年,設計的主要目的是:使得計算機語言能夠被非理工科生使用(當時理工科學生使用的Fortran和Algol 60很難被文科生掌握)。

這樣的設計目的使得BASIC很是適合於初學者。

BASIC來自於Fortran IV,語法受到Algol 60影響。是BASIC是第一個被普遍使用的分時處理語言。

九、學院派語言:Pascal

Pascal語言誕生於1971年,來自於Algol 68。

Pascal重大影響來自於程序設計教學。它的出現取代了Fortran做爲程序設計入門語言的地位。

Pascal在工業界也有普遍的使用。

十、系統語言:C

貝爾實驗室的UNIX操做系統,最第一版本使用匯編語言寫成,並1970年,在UNIX上實現的第一個高級語言叫作B語言,B的目的是:用於開發UNIX系統程序,以及新版本的UNIX操做系統。B以BCPL語言爲基礎。

BCPL,誕生於1967劍橋大寫,它的祖先是1962年誕生誕生於同一所大學的CPL語言。

B和彙編同樣數據類型就是機器字,這極大的限制了B程序在不一樣位數的機器之間的遷移。B的這種不可一致性致使了C的產生。

C語言就是B的改進版本,一樣以BCPL基礎,誕生引入了Algol 68的特色,使得C語言稱爲了一個可移植系統程序語言。

C語言語法中對操做符的大量靈活的使用,極大的印象了後來的一批程序語言。

十一、邏輯語言:Prolog

Prolog誕生於1972年,是邏輯式編程的鼻祖。所謂邏輯式編程,就是以形式邏輯的方式將計算過程傳遞給計算機。

十二、極簡主義:Scheme

Scheme做爲一種Lisp方言,一樣誕生在MIT,時間是1975年。Scheme第一個引入詞法做用域,延續體,閉包等概念。並將數據和函數等同對待。

Scheme的簡約優美使它博得了計算機語言皇后的桂冠,並與另外一個以優雅著稱的Pascal一塊兒成爲教學語言。

Scheme是函數式語言主要用於數學算法教學,Pascal是命令式語言主要用於程序設計教學。

1三、Algol式語法的函數式語言:ML

ML誕生於1979年,ML開創了以Algol做語法的函數式語言的先河。

1四、強類型惰性純函數式語言:Haskell

Haskell是1990年標準化Miranda語言的結果。

Miranda誕生於1986年,部分基於ML語言。

Haskell最大的特色是惰性求值。

1五、支持面向對象的函數式語言:OCaml

Caml誕生於1996年,基於ML和Haskell。

OCaml是Caml的面向對象版本,發佈於2006年。

F#是基於OCaml的.NET平臺版本,發佈於2010年。

1六、嵌入式語言:Ada

Ada語言誕生於1980年,是嵌入式系統應用語言。

Ada 83是1983年的標準化版本。

1995年的,Ada 95標準語言在ARM中定義。

Ada的最新版本是Ada 2005。

Ada普遍的用於商務、國防航空和交通運輸等領域。

1七、純面嚮對象語言:Smalltalk

Smalltalk語言誕生於1980年,是第一個徹底支持面向對象編程的語言。

Smalltalk源於SIMUAL 67,完善並定義了消息發送,和對象的繼承關係。

在Smalltalk中,全部數據都是對象:消息的發送者,消息的接受者,消息,消息的結果…。對象的類型是類。類中能夠定義方法,屬性等。

1八、命令式面嚮對象語言:C++

C++誕生於1983年,是在C的基礎上,以SIMUAL 67的方式對命令式編程的面向對象擴展。C++的成功在於徹底兼容C的狀況下支持了面向對象,從而使面向對象編程成爲了命令式編程的一個子類,傳統的命令式編程被叫作面向過程編程。

由於對C的徹底兼容,ASNI在1989年的標準化版本C 89,合併的兩種語言,叫作C/C++。

C/C++的最重要版本是1999年的C 99。幾乎吸取了當時被認爲比較有效的計算機語言特性:面向過程編程、面向對象編程、泛型編程、自定義操做符重載等。

C/C++的最新是2011年發佈的C 11。引入的lambda表達式,垃圾回收等機制。

因爲C/C++吸取了太多的語言特性,使得C/C++成爲世界上最難精通的語言,沒有之一。

C/C++是目前使用人數最多的語言,和它一直競爭的是Java(具體可查看馬海祥博客《關於C語言、C++、Java和Python這4種程序開發語言的評價》的相關介紹)。

1九、原型面嚮對象語言:Self

Self誕生於1986年。Self源自於Smalltalk。

Self對面向對象作了深刻與研究,提出了「萬物皆對象」的思想。它刪除了面向對象概念中的類的概念認爲類也是一種對象;消息仍然做爲最基本操做;把對象的屬性理解爲獲取或更改屬性這兩種方法,從而把屬性的概念簡化爲方法;取消了變量和賦值,替代它們的是經過消息來讀槽和寫槽。

在Self中對象建立對象的方式是自我拷貝,因此叫作原型。

Self是原型面嚮對象語言的鼻祖,就像SIMUAL 67是類面向對象語的鼻祖。

20、另外一個對C進行面向對象擴展的語言:Objective-C

Objective-C誕生於1983年,後來被蘋果公司選中,和C++類似,也是對C的面向對象擴展。所不一樣的是C++以SIMUAL 67的面向對象爲基礎,Objective-C以Smalltalk的面向對象基礎。

Object-C一直伴隨着蘋果公司的操做系統一塊兒發展,這兩年隨着iOS的開發被普遍使用。

2一、對Pascal進行面向對象擴展的語言:Delphi

Delphi誕生於1995年,是對Pascal的面向對象擴展,借鑑了C/C++的經驗,但沒有像C/C++後來那樣的瘋狂變化。

2二、腳本語言:Perl

Perl發佈於1987年。Perl起源於操做系統的控制檯(shell)的命令。用戶將完成某個工做的全部命令保存在一個sh文件裏,這樣只要執行這個文件就可完成對應功能,省去每次都要輸入全部命令的麻煩。sh文件就叫作腳本。

腳本只是一些命令行,但是發展到Perl時已是一個至關成熟的語言了。

2三、關聯列表函數式面向對象腳本語言:Lua

Lua誕生於1993年,設計目的是嵌入引用程序,成爲其腳本。Lua以其小巧性著稱。

Lua基於Self和Scheme,它是第一個以關聯列表最爲主要數據的函數式語言。

2四、虛擬機面嚮對象語言:Java

誕生於1995年的Java 1.0,來自於Sun公司,是第一個在虛擬機上運行的語言。

再這以前計算機語言要麼:由解釋器解釋執行源代碼(大多數命令式語言),叫作動態語言;要麼:將源代碼編譯鏈接成實際的計算機指令後再由計算機執行(大多數命令式語言),叫作靜態語言。

Java運行於JM(Java虛擬機)上,JM和解釋器的區別是:JM會將Java源代碼編譯成字節碼,而後而後再由JM解釋執行。因爲編譯和執行過程是交錯的,因此從外部來看就像是JM直接執行Java源代碼同樣。固然也能夠,事先將Java源文件編譯好,這樣JM就能夠直接執行了。

Java 1.0是C++的簡化版本,保留了具備數據類型和類等一小半功能,刪除告終構體,泛型編程等一多半的功能(具體可查看馬海祥博客《你知道Java內部的這些事兒嗎》的相關介紹)。

Java 5.5 支持了泛型編程編程。

最新版本是2014發佈的Java 8.0,支持了lambda表達式。

Java是面向對象編程使用人數最多的語言。(C/C++的大部分人之使用C部分,即面向過程變成)。

Java的強有力競爭對手是C#。

2五、面向對象解釋式腳本語言:Python

Python誕生於1989年,做者爲了打發聖誕節的無趣,決心開發一個新的腳本解釋程序,作爲 ABC語言的一種繼承。ABC是做者開發的教學語言。

Python和Perl用於相同領域,是面向過程+面嚮對象語言(具體可查看馬海祥博客《Python語言代碼的性能優化方法大全》的相關介紹)。

2六、純面向對象解釋式腳本語言:Ruby

Ruby誕生於1996年,做者基於對Perl和Python的不滿而設計,的純面向對象腳本語言。

Ruby基本等於Smalltalk + Lisp。

2七、Web服務器腳本語言:PHP

PHP誕生於1994年,是Web服務器腳本語言。

PHP和JavaScript的語發類似,都是嵌入在HTML中,只不過一個在服務器端,一個在瀏覽器端。

2八、瀏覽器腳本語言:JavaScript

1995年,網景公司發行的 Netscape Navigator 2.0,它的腳步語言就是JavaScript。

JavaScript和Java沒有任何關係,它的前身是ScriptEase。

ScriptEase的誕生於1992年原名C-minus-minus,是一個足夠強大能夠替代宏操做(macro)的腳本語言,同時保持與 C足夠的類似性,以便開發人員能很快學會。

ScriptEase基於C和Self語言,支持面向過程和原型面向對象編程。

JavaScript後來由引入了Lua語言,支持以關聯列表做爲數據格式的函數式編程,這種關聯列表這就是著名的JSON。

最後JavaScript是一個:表面叫Java腳本,可是和Java沒有任何關係;表面上是一個像C語言同樣的面向過程語言,但其實是一個原型面嚮對象語言;表面上你建立了一個對象,但其實只是一個關聯列表;表面上你在定義變量和賦值,其實只是<鍵,值>對;表面上你聲明函數,其實只是<鍵,lambda表達式>對。表面上是一個命令式編程語言,但本質上是一個以關聯列表爲數據格式的函數式編程語言。

2九、.NET平臺主語言:C#

C#於2000年和.NET開發平臺一塊兒由微軟發佈。

C#是.NET開發平臺的主語言。.NET開發平臺包括,運行IL語言的虛擬機CLR,基於IL語言的公共類庫,用於編譯產生IL語言程序的高級語言,以及支持這些高級語言開發的編譯的基礎開發環境。

因爲CLR和IL公共類庫做爲Window操做系統的一部分捆綁發佈,因此IL語言程序能夠再Window操做系統上直接執行,就行機器指令同樣。

CLR運行IL和JM運行Java同樣,只不過CLR將IL編譯成機器指令,而後在由計算機直接執行,而JM是將Java編譯成字節碼,而後由解釋器解釋執行。

.NET開發平臺支持多種語言,其中C#是主語言。

C# 1.0 基於Java和C++,以Java爲基礎將更多的C++加入進來,而且吸取了一些Delphi和Visual Basic的特性。

C# 2.0 引入泛型編程。

C# 4.0支持了lambda表達式,Linq等。

最新版本是2014發佈的C#5.0。

.NET 4.0引入了動態類型,使得.NET平臺能夠嵌入動態語言,好比:Lisp、Python、 Ruby等。

30、再也不基礎的BASIC:Visual Basic .NET

Quick BASIC由美國微軟公司開發,1987年推出,它是BASIC的繼承者。

Quick BASIC是DOS下的開發語言,後來隨着Window系統的推出加入了圖像化設計因此新的版本更名爲:Visual Basic。Visual Basic是第一個支持可視化界面設計的語言。

1998年發佈的Visual Basic 6.0 是一個應用很是普遍的版本。

2001年,Visual Basic遷移到了.NET平臺上,更名Visual Basic .NET。Visual Basic .NET對BASIC語言特性進行了重大改進。今後Visual Basic .NET伴隨.NET開發平臺一塊兒發展。

補充,R語言如今是最流行的統計計算語言,是S4語言的免費版本,S語言由貝爾實驗室創造。R語言、3M數學計算語言(Matlab、Mathematica、Maple)、彙編語言都未列入名錄。

相關文章
相關標籤/搜索