1. 程式人生 > >計算機和程式語言的發展歷史

計算機和程式語言的發展歷史

計算機的發展歷史

在第二次世界大戰中,美國政府尋求計算機以開發潛在的戰略價值。這促進了計算機的研究與發展。1944年霍華德.艾肯(1900-1973)研製出全電子計算器,為美國海軍繪製彈道圖。這臺簡稱 Mark I 的機器有半個足球場大,內含500英里的電線,使用電磁訊號來移動機械部件,速度很慢(3-5秒一次計算)並且適應性很差只用於專門領域,但是,它既可以執行基本算術運算也可以運算複雜的等式。

1946年2月14日,由美國軍方定製的世界上第一臺電子計算機“電子數字積分計算機”(ENIAC Electronic Numerical And Calculator)在美國賓夕法尼亞大學問世了。ENIAC(中文名:埃尼阿克)是美國奧伯丁武器試驗場為了滿足計算彈道需要而研製成的,這臺計算器使用了17840支電子管,大小為80英尺×8英尺,重達28t(噸),功耗為170kW,其運算速度為每秒5000次的加法運算,造價約為487000美元。

第一臺計算器
1、第1代:電子管數字機(1946—1958年)

(1)硬體方面,邏輯元件採用的是真空電子管,主儲存器採用汞延遲線電子管數字計算機、陰極射線示波管靜電儲存器、磁鼓、磁芯;外儲存器採用的是磁帶。軟體方面採用的是機器語言、組合語言。應用領域以軍事和科學計算為主。

(2)特點是體積大、功耗高、可靠性差。速度慢(一般為每秒數千次至數萬次)、價格昂貴,但為以後的計算機發展奠定了基礎。

2、第2代:電晶體數字機(1958—1964年)

(1)硬體方的作業系統、高階語言及其編譯程式。應用領域以科學計算和事務處理為主,並開始進入工業控制領域。

(2)特點是體積縮小、能耗降低、可靠性提高、運算速度提高(一般為每秒數10萬次,可高達300萬次)、效能比第1代計算機有很大的提高。

3、第3代:積體電路數字機(1964—1970年)

(1)硬體方面,邏輯元件採用中、小規模積體電路(MSI、SSI),主儲存器仍採用磁芯。軟體方面出現了分時作業系統以及結構化、規模化程式設計方法。

(2)特點是速度更快(一般為每秒數百萬次至數千萬次),而且可靠性有了顯著提高,價格進一步下降,產品走向了通用化、系列化和標準化等。應用領域開始進入文書處理和圖形影象處理領域。

4、第4代:大規模積體電路機(1970年至今)

(1)硬體方面,邏輯元件採用大規模和超大規模積體電路(LSI和VLSI)。軟體方面出現了資料庫管理系統、網路管理系統和麵向物件語言等。

(2)特點是1971年世界上第一臺微處理器在美國矽谷誕生,開創了微型計算機的新時代。應用領域從科學計算、事務管理、過程控制逐步走向家庭。

UNIX作業系統和C語言的由來

早期的操作人員是通過帶有孔的紙帶將程式輸入電腦進行編譯(對紙條打點),後面出現了組合語言,操作人員每人一個小冊子(指令小冊子),開發人員非常非常辛苦

二進位制語言:

  1. 0000,0000,000000010000 代表 LOAD A, 16

  2. 0000,0001,000000000001 代表 LOAD B, 1

  3. 0001,0001,000000010000 代表 STORE B, 16

組合語言:

組合語言

  • UNIX作業系統產生

1、20世紀60年代,貝爾實驗室的研究員Ken Thompson(肯·湯普森)發明了B語言,並使用B編了個遊戲 - Space Travel,他想玩自己這個遊戲,所以他揹著老闆找到了臺空閒的機器 - PDP-7,但是這臺機器沒有作業系統,於是Thompson著手為PDP-7開發作業系統,後來這個OS被命名為 - UNIX。Thompson(肯·湯普森)發明了UNIX

Unix

2、1971年,Ken Thompson的同事D.M.Ritchie(DM裡奇),也很想玩Space Travel,所以加入了Ken Thompson,合作開發UNIX,他的主要工作是改進Thompson的B語言。

最終,在1972年這個新語言被稱為C,取BCPL的第二個字母,也是B的下一個字母

C語言

D.M.Ritchie(DM裡奇)發明了C語言

3、1973年,C主體完成。Ken Thompson和D.M.Ritchie迫不及待的開始用C語言完全重寫了UNIX。此時程式設計的樂趣已經使他們完全忘記了那個“Space Travel”,一門心思的投入到了UNIX和C語言的開發中。自此,C語言和UNIX相輔相成的發展至今。

C語言作者

Ken Thompson(left)和D.M.Ritchie(right)

  • 類C語言起源、歷史

C語言、C語言的起源以及類似C語言的程式語言的歷史簡直不要太漫長,我簡單總結列表如下:

CPL(Combined Programming Language) - 1963
CPL是1963年劍橋大學發明的

BCPL(Base Combined Programming Language) - 1967
劍橋的Matin Richards 對CPL做了簡化,推出了BCPL

B(B Programming Language) - 1969
貝爾實驗室的Ken Thompson(肯·湯普森) 對BCPL又做了改進,設計出了簡單的且接近硬體的B語言,並用B語言寫了第一個UNIX OS

C(C Programming Language) - 1972
貝爾實驗室的另外一個人Dennis MacAlistair Ritchie(D.M.Ritchie - DM裡奇)在B的基礎上設計出了C語言。C 保持了B的優點(精煉、接近硬體),又克服了他的缺點(過於簡單,資料無型別)

C++(C plus plus Programming Language) - 1983
還是貝爾實驗室的人,Bjarne Stroustrup(本賈尼·斯特勞斯特盧普) 在C語言的基礎上推出了C++,它擴充和完善了C語言,特別是在面向物件程式設計方面。一定程度上克服了C語言編寫大型程式時的不足。

Java(Java Programming Language) - 1995
Sun公司的Patrick Naughton的工作小組研發了Java語言,主要成員是James Gosling(詹姆斯·高斯林)

C#(C Sharp Programming Language) - 2000
Microsoft公司的Anders Hejlsberg(安德斯·海爾斯伯格)發明了C#,他也是Delphi語言之父。

瀏覽器和JavaSript的歷史

1994年,網景公司(Netscape)釋出了Navigator瀏覽器0.9版,這是世界上第一款比較成熟的網路瀏覽器,

轟動一時。
但是這是一款名副其實的瀏覽器–只能瀏覽頁面,瀏覽器無法與使用者互動。比如你登入一個網站輸入完使用者名稱點選提交的時候。瀏覽器並不知道你是否輸入了,也無法判斷。只能傳給伺服器去判斷。

網景瀏覽器

1、計算機的越來越好的同時,網上衝浪也越來越流行時,對於開發客戶端指令碼的需求也逐漸增大。此時,大部分因特網使用者還僅僅通過 28.8 kbit/s 的調變解調器連線到網路,即便這時網頁已經不斷地變得更大和更復雜。而更加加劇使用者痛苦的是,僅僅為了簡單的表單有效性驗證,就要與伺服器進行多次地往返互動。設想一下,使用者填完一個表單,點選提交按鈕,等待了 30 秒的處理後,看到的卻是一條告訴你忘記填寫一個必要的欄位。

2、網景急於解決瀏覽器與使用者互動這個問題。當時解決這個問題有兩個辦法,一個是採用現有的語言,比如Perl、Python、Tcl、Scheme等等,允許它們直接嵌入網頁。另一個是發明一種全新的語言。這兩個選擇各有利弊。第一個選擇,有利於充分利用現有程式碼和程式設計師資源,推廣起來比較容易;第二個選擇,有利於開發出完全適用的語言,實現起來比較容易。到底採用哪一個選擇,網景公司內部爭執不下,管理層一時難以下定決心。

3、就在這時發生了一件大事,1995年Sun公司將Oak語言改名為Java,正式向市場推出。Sun公司大肆宣傳,許諾這種語言可以"一次編寫,到處執行"(Write Once, Run Anywhere),它看上去很可能成為未來的主宰。

Java語言

4、網景公司動了心,決定與Sun公司結成聯盟。它不僅允許Java程式以applet(小程式)的形式,直接在瀏覽器中執行;甚至還考慮直接將Java作為指令碼語言嵌入網頁,只是因為這樣會使HTML網頁過於複雜,後來才不得不放棄。

5、總之,當時的形勢就是,網景公司的整個管理層,都是Java語言的信徒,Sun公司完全介入網頁尾本語言的決策。 因此,Javascript後來就是網景和Sun兩家公司一起攜手推向市場的,這種語言被命名為"Java+script"並不是偶然的。

6、此時,34歲的系統程式設計師(布蘭登·艾奇)Brendan Eich登場了。

JavaSript的作者

7、1995年4月,網景公司錄用了他。Brendan Eich的主要方向和興趣是函數語言程式設計,網景公司招聘他的目的,是研究將Scheme語言作為網頁尾本語言的可能性。Brendan Eich本人也是這樣想的,以為進入新公司後,會主要與Scheme語言打交道。

8、僅僅一個月之後,1995年5月,網景公司做出決策,未來的網頁尾本語言必須"看上去與Java足夠相似",但是比Java簡單,使得非專業的 網頁作者也能很快上手。 這個決策實際上將Perl、Python、Tcl、Scheme等非面向物件程式設計的語言都排除在外了。

9、Brendan Eich被指定為這種"簡化版Java語言"的設計師。但是,他對Java一點興趣也沒有。為了應付公司安排的任務,他只用10天時間就把Javascript設計出來了。由於設計時間太短,語言的一些細節考慮得不夠嚴謹,導致後來很長一段時間,Javascript寫出來的程式混亂不堪。如果Brendan Eich預見到,未來這種語言會成為網際網路第一大語言,全世界有幾百萬學習者,他會不會多花一點時間呢?
總的來說,他的設計思路是這樣的:
(1)借鑑C語言的基本語法;
(2)借鑑Java語言的資料型別和記憶體管理;
(3)借鑑Scheme語言,將函式提升到"第一等公民"(first class)的地位;
(4)借鑑Self語言,使用基於原型(prototype)的繼承機制。
所以,Javascript語言實際上是兩種語言風格的混合產物----(簡化的)函數語言程式設計+(簡化的)面向物件程式設計。 這是由Brendan Eich(函數語言程式設計)與網景公司(面向物件程式設計)共同決定的。

語言的分類

  • 按照語言發展的過程來分

1、面向機器的語言:二進位制,彙編

2、面向過程的語言:組合語言,C語言,B語言,

3、基於面向物件的語言:最典型的就是C++語言,OC

4、面向物件的語言:Java語言,C#語言等

語言的發展

  • 按照型別的強弱來分

1、強型別語言:C語言,C++,Java 那變數的宣告來舉例子:定義變數必須指定變數的型別

2、弱型別語言:python,javaScript,Swift,kotlin

語法更加簡單,更加易於學習,關鍵字也減少了

  • 按照需不需編譯來分:

1、指令碼語言:Cmd命令,資料庫操作語言SQL,JavaScript

2、預編譯語言:最典型的就是Java語言,首先生成Java彙編,然後通過虛擬機器進一步轉換成計算機可以識別的二進位制組合語言

3、編譯語言:組合語言,C語言,C++語言,

4、標記語言:Html語言,語言本身沒有內容,只是起到輔助的作用,沒有他也沒問題,只不過影響美觀

隨著計算機的發展,計算機面臨的需求越來越多,解決的問題也越來越複雜,更高的封裝才能解決更加棘手的問題,開發效率也會更高,也更易於學習和開發;舉個例子:彙編做一年的工作,C語言可能只需要半年,C++只需要三個天,phthon只需要一天;越是離機器遠的語言,執行效率越低,開發效率越高,一般稱之為高階語言,越是離機器近的語言,執行效率越高,開發效率越低,一般稱之為低階語言,低階和高階僅僅指的是語言距離機器的遠近;早期由於計算機硬體效能低,大家對程式的要求比較嚴格,但隨著計算機的不斷髮展,硬體效能的大規模提升,程式本身影響執行效率的因素越來越輕微,專案越來越大,開發效率成為很重要的指標,而且高階語言更易於學習,可讀性也遠遠高於低階語言,這也是面嚮物件語言流行的原因。