編程語言王者:C語言的前世今生

C語言誕生於1972年,由偉大的美國計算機科學家Dennis MacAlistair Ritchie發明。C語言的發明,是計算機科學發展史上的一個偉大的創舉,直接影響了後來的IT技術革命和互聯網技術革命。時至今日,絕大多數的底層軟件,包括操作系統(如Windows, Linux, UNIX等),數據庫軟件(如MySQL),辦公軟件(如OpenOffice),殺毒軟件,網絡通信協議,包括JAVA語言的實現,互聯網,以及各種內核驅動等都是用C語言開發的。


曾經就職於Amazon和Google的卓越程序員Steve Yegge在他的文章《幾種編程語言的優缺點》以及《程序員的吶喊》中指出“你必須懂C”,因為C最懂馮諾依曼計算機,而馮諾依曼計算機是當今計算機的架構標準。創業書籍《騰訊傳》裡指出:馬化騰從大學二年級開始把很多精力花在了C語言的學習上。馬化騰曾說:“我們最終是靠C打天下的”。


C語言作為編程語言之王,是當之無愧的。


截止2020年3月,C語言在TIOBE編程語言使用排行榜上依然佔據TOP2的位置,僅次於排名第一的Java語言。

編程語言王者:C語言的前世今生

編程語言排行榜TIOBE

1.1 編程語言的演變與進化

那麼C語言為什麼叫“C語言”呢?下面,我們來一起追溯一下C語言誕生的這段不平凡的歷史。


在高級編程語言的進化歷史中,最重要的里程碑就是ALGOL算法語言的推出。ALGOL是算法語言(ALGOrithmic Language)的簡稱,是在計算機發展史上首批清晰定義的高級語言,由歐美計算機學家合力在1950年代所開發。國際計算機學會(Association for Computing Machinery,ACM)將ALGOL模式列為算法描述的標準,啟發ALGOL類現代語言Pascal、Ada、C語言等出現。


1950年代末期,大量的新增計算機語言湧現,而這些新語言大都圍繞單個體繫結構如UNIVAC計算機、IBM700系列計算機等開發,使不同系統用戶間的交流變得困難。美國一些主要的計算機用戶組建議研究與開發適用於與計算機無關的科學用程序設計語言。1958年5月27日至6月1日,德國的應用數學和力學學會(Gesellschaft für Angewandte Mathematik und Mechanik,GAMM)和ACM派人出席在蘇黎世舉行第一次設計會議,為新語言定下目標。新語言先被命名為國際代數語言(International Algebraic Language,IAL) ,後定名為ALGOL,即算法語言。後來改稱Algol 58,成為ALGOL家族的第一個成員。


圖靈獎獲得者:艾倫.佩利(Alan J.Perlis)在巴黎舉行的有全世界一流軟件專家參加的討論會上,發表了"算法語言Algol 60報告",確定了程序設計語言Algol 60。Algol60語言的第一個編譯器由Edsger W. Dijkstra來實現。1962年,艾倫。佩利又對Algol 60進行了修正。


Algol 60是程序設計語言發展史上的一個里程碑,它標誌著程序設計語言成為一門獨立的科學學科,併為後來軟件自動化及軟件可靠性的發展奠定了基礎。2006年3月1日, ACM宣佈彼得.諾爾(Peter Naur,丹麥天文學家)為2005年A.M.圖靈獎的獲得者。這個獎項是由於諾爾在定義Algol 60這種程序設計語言方面的先驅性工作(把BNF(Bcakus-Naur-Form,由巴克斯首創,但經諾爾改進而成的)範式引入Algo60中)而頒發給他的。Algol 60是許多後來的程序設計語言,包括今天那些必不可少的軟件工程工具的原型。


編程語言王者:C語言的前世今生

圖靈獎獲得者Peter Naur

2002年,前圖靈獎得主Edsger Dijstra把Algol 60的發展描述為"一個絕對的奇蹟",標誌著他所說的"計算科學"的誕生,因為Algol 60首次顯示了自動計算能夠並且應當成為學術關注的主題。 Algol 60的發展是一群極具天賦的人才的工作成果,其中包括幾位以後的圖靈獎獲得者。

編程語言王者:C語言的前世今生

Edsger W. Dijkstra


1963年英國劍橋大學推出了CPL(Combined Programming Langurage)語言。CPL語言在ALGOL 60 的基礎上接近硬件一些,但規模比較大,難以實現。

編程語言王者:C語言的前世今生

英國劍橋大學


1967年英國劍橋大學的 Matin Richards對CPL語言做了簡化,推出了 BCPL (Base Combined Programming Langurage)語言。


1970年美國貝爾實驗室的 Ken Thompson 以 BCPL 語言為基礎,又作了進一步的簡化,設計出了很簡單的而且很接近硬件的 B 語言(取BCPL的第一個字母),並用B語言寫出了第一個 UNIX 操作系統。


但 B 語言過於簡單,功能有限。1972年至1973年間,貝爾實驗室的 D.M.Ritchie 在 B 語言的基礎上設計出了 C 語言(取BCPL的第二個字母)。C語言即保持 BCPL 語言和 B 語言的優點(精練、接近硬件),又克服了他們的缺點(過於簡單,數據無類型等)。


1973年初,C語言的主體完成。Thompson和Ritchie開始用它完全重寫了UNIX。隨著UNIX的發展,C語言自身也在不斷地完善。


1977年,Dennis M.Ritchie發表了不依賴於具體機器系統的C語言編譯文本《可移植的C語言編譯程序》


編程語言王者:C語言的前世今生

編程語言王者:C語言的前世今生

圖靈獎獲得者:Ken Thompson(左)與Dennis M. Ritchie(右)


1983年,貝爾實驗室的Bjarne Stroustrup在C語言基礎上推出了C++,更早以前,尚在研究階段的發展中語言曾被稱為“new C”,之後是“C with Class”。 C++進一步擴充和完善了C語言,是一種面向對象的程序設計語言。


編程語言王者:C語言的前世今生

C++之父Bjarne stroustrup


C++程序過於複雜和龐大。另外由於消費電子產品所採用的嵌入式處理器芯片的種類繁雜,如何讓編寫的程序跨平臺運行也是個難題。為了解決困難,Sun公司研發人員並沒有開發一種全新的語言,而是根據嵌入式軟件的要求,對C++進行了改造,去除了留在C++的一些不太實用及影響安全的成分,並結合嵌入式系統的實時性要求,開發了一種稱為Oak的面嚮對象語言。


1995年,互聯網的蓬勃發展給了Oak機會。Sun公司首先推出了可以嵌入網頁並且可以隨同網頁在網絡上傳輸的Applet(Applet是一種將小程序嵌入到網頁中進行執行的技術),並將Oak更名為Java(在申請註冊商標時,發現Oak已經被人使用了,再想了一系列名字之後,最終,使用了提議者在喝一杯Java咖啡時無意提到的Java詞語)。5月23日,Sun公司在Sun world會議上正式發佈 Java。IBM、Apple、DEC、Adobe、HP、Oracle、Netscape和微軟等各大公司都紛紛停止了自己的相關開發項目,競相購買了Java使用許可證,併為自己的產品開發了相應的Java平臺。


1996年1月,Sun公司發佈了Java的第一個開發工具包(JDK 1.0),這是Java發展歷程中的重要里程碑,標誌著Java成為一種獨立的開發工具。


編程語言王者:C語言的前世今生

Java之父James Gosling


一般而言,C,C++,java被視為同一系的語言,它們長期佔據著程序使用榜的前三名。


編程語言王者:C語言的前世今生

C語言的進化樹

1.2 C標準的制定

在1982年,很多有識之士和美國國家標準協會(ANSI)為了使這個語言健康地發展下去,決定成立C標準委員會,建立C語言的標準。


1989年,ANSI發佈了第一個完整的C語言標準——ANSI X3.159—1989,簡稱“C89”,人們也習慣稱其為“ANSI C”。


1990年,國際標準化組織(ISO)和國際電工委員會(IEC)把C89標準定為C語言的國際標準,命名為ISO/IEC 9899:1990 - Programming languages -- C[5] 。因為此標準是在1990年發佈的,所以有些人把簡稱作C90標準。不過大多數人依然稱之為C89標準,因為此標準與ANSI C89標準完全等同。


1999年,在做了一些必要的修正和完善後,ISO發佈了新的C語言標準,命名為ISO/IEC 9899:1999,簡稱“C99”。


在2011年12月8日,ISO又正式發佈了新的標準,稱為ISO/IEC9899: 2011,簡稱為“C11”。


分享到:


相關文章: