C語言之父丹尼斯·里奇先生于2011年10月8日在位于美國新澤西州的家中病逝。這一新聞在廣大計算機的愛好者和研究人員中引起巨大反響,然而諸多悼詞和追憶的描述卻不夠準確。在此,我們借本文回顧里奇先生一生的巨大貢獻,愿世人緬懷,愿先生安息。
里奇先生被譽為C語言之父,他不但和肯·湯普森(Ken Thompson)一起創(chuàng)造了C語言。他還開發(fā)出了UNIX操作系統(tǒng),我們?nèi)缃袷褂玫暮芏嗖僮飨到y(tǒng)都是建構(gòu)在UNIX內(nèi)核之上,包括蘋果帝國的所有產(chǎn)品。
回憶一周之前,喬布斯去世時,網(wǎng)絡上鋪天蓋地諸多贊譽與哀思,其產(chǎn)品風靡所帶來的全球性用戶崇拜史無前例。其實,里奇先生更應享受這些贊譽,甚至更多。
羅伯是里奇的同事,二人在貝爾實驗室共事20年,正是他在第一時間于Google+上發(fā)表這則新聞。羅伯說:
當喬布斯去世時,享受到了聲勢浩大的追思。相形之下,里奇先生對當代科技進程做出了更大的貢獻,可公眾甚至不知道他是誰,這十分不公平。
網(wǎng)絡已經(jīng)成為當代生活不可或缺的一部分。然而,缺少了里奇所創(chuàng)造的 C 語言和 UNIX ,網(wǎng)絡和任何網(wǎng)絡產(chǎn)品都不可能存在。比如,瀏覽器是用 C 語言寫的,網(wǎng)絡服務器是C語言寫的,很多人反駁說他們所使用的是 JAVA 或者 C++,但它們也是 C 語言的衍生物。包括網(wǎng)頁架構(gòu)時的 Python 和 Ruby 兩種程序語言,也是基于 C 語言的。除此而外,所有的網(wǎng)絡硬件產(chǎn)品都是 C 語言所編寫的,而 UNIX 是整個因特網(wǎng)所運行的基礎(chǔ)。由此可見,我們怎樣評價里奇先生的豐功偉績,都不足為過。甚至Windows 也曾經(jīng)用C 語言寫過,蘋果公司用于個人電腦、iPad和iPhone上的操作系統(tǒng),都是基于UNIX的。
麻省理工大學計算機系的馬丁教授評價說:
如果說,喬布斯是可視化產(chǎn)品中的國王,那么里奇就是不可見王國中的君主。喬布斯的貢獻在于,他如此了解用戶的需求和渴求,以至于創(chuàng)造出了讓當代人樂不思蜀的科技產(chǎn)品。然而,卻是里奇先生為這些產(chǎn)品提供了最核心的部件,人們看不到這些部件,卻每天都在使用著。
1972年,丹尼斯·里奇和肯·湯普森在操作PDP-11迪吉多電腦
里奇開發(fā) C 語言的初衷,是在與肯·湯普森合作研發(fā) UNIX 系統(tǒng)時需要一種更好的描述性語言。
剛開始,UNIX 內(nèi)核是使用匯編語言編寫而成的。然而隨著開發(fā)進展,數(shù)據(jù)量猛增,能夠?qū)?shù)據(jù)進行有效整理和靈活操作的需求便應運而生。在1970年前后,他們嘗試通過改進 Fortran 語言來進行數(shù)據(jù)管理和操作,卻沒有達到預想的目的。隨即幾年后,二人合作公布出了 B 語言。
關(guān)于 B 語言的名字由來,傳言有兩個版本。一說B是為了紀念肯恩的妻子邦妮(Bonnie),另有說法稱, B 指代 BCPL,這是上世紀60年代中期由劍橋大學開發(fā)出的一種計算機語言。這兩種說法孰是孰非并不重要,重要的是 B 語言的命名決定了其后的改進版本被命名為, C 語言。
B 語言是一種解釋性語言,也就是說它在軟件運行和 CPU 運行中起到中間層的作用。與此不同, C 語言是編譯語言,它在運行之前被編譯成機器語言,直接在 CPU 上運行,其運行速度非B語言所能比。
最早期的 C 語言和我們?nèi)缃袼褂玫陌姹究蚣苌喜]有太大出入,但是功能簡化許多。當時為了滿足研發(fā)新型 UNIX 內(nèi)核的需要,它主要提供了數(shù)據(jù)結(jié)構(gòu)和變量類型。
里奇曾開玩笑稱, C 語言擁有匯編語言的力量和匯編語言的便利性。這句話的意思是, C 語言的運行方式更接近于硬件系統(tǒng)。但是,里奇的這句玩笑并沒有準確定位 C 語言的地位, C 語言所提供的數(shù)據(jù)結(jié)構(gòu),力發(fā)千鈞,足以貫穿所有高層和底層的語言。
羅伯解釋數(shù)據(jù)結(jié)構(gòu)的重要性:
當你在編寫一個大型程序的時候,你需要管理各個組件之間的聯(lián)系,包括用戶、文件、硬盤、程序執(zhí)行等等。為了對這些部分進行有效的控制,首先就需要對所使用的信息和數(shù)據(jù)進行清晰有效的表達,這個表達形式就是數(shù)據(jù)結(jié)構(gòu)。
正如 UNIX 的源代碼清晰流暢,可讀性強。如果沒有一個好的數(shù)據(jù)結(jié)構(gòu)作為基礎(chǔ),這是不可能實現(xiàn)的。比如,當我們需要對大量數(shù)據(jù)進行分類和整合的時候,如果使用的是 Fortran 語言,就會變得束手無策。
由于 C 語言中對于數(shù)據(jù)結(jié)構(gòu)的有效準確的定義,使得其具有強大的可移植性。這種特性使得用C語言所編寫出的操作系統(tǒng)可以用于不同的平臺,這正是里奇在研發(fā) UNIX 時最主要的初衷,也是如今新型操作系統(tǒng)的主流開發(fā)方法。
比爾是英偉達公司的首席科學家,同時也是斯坦福大學貝爾實驗室的教授,他說:
C 語言的開發(fā)是科技史上不可磨滅的偉大貢獻,因為這個語言把握住了計算機科技中一個至關(guān)重要的并且是恰到好處的中間點,一方面它具備搭建高層產(chǎn)品的能力,另一方面又能夠?qū)τ诘讓訑?shù)據(jù)進行有效控制。正是由于這種關(guān)聯(lián)性和樞紐性作用,決定了 C 語言所導向的近三十年來計算機編程主流方式。
從貝爾實驗室到微軟,再到眾人所熟知的利器, C 語言是怎樣在科技打造世界的革命中成為了最強有力的武器呢?
革命風潮始發(fā)于1973年,里奇發(fā)表出第一篇關(guān)于C語言的學術(shù)性論文。5年之后,他和同事布萊恩·克尼漢撰寫出里程碑式的一本書《C程序設(shè)計語言》(The C Programming Language)??四釢h日后回憶說,為了說服里奇加入合著陣營他費盡口舌,他笑稱甚至險些“扭斷了里奇的胳膊”。
羅伯對于里奇的崇拜正是來源于這本書。當時,他還是多倫多大學里的一名本科生,他回憶道:“我是在病床上第一次讀這本書,立馬就被其清晰的描述和深入淺出的解讀給吸引住了,這種語言和邏輯的清晰準確表達是日后任何教材或者參考手冊都無法超越的,它堪稱經(jīng)典,甚至讓我忘記了當時正在生病。”
通過這本書,當年如羅伯一樣的很多大學生開始使用 C 語言。尤其當貝爾實驗室公布出 UNIX 的源代碼之后,C語言的風潮已經(jīng)勢不可擋??梢哉f, UNIX 源代碼的公布不僅推進了計算機語言的發(fā)展,更決定了日后互聯(lián)網(wǎng)時代的開源計劃是應始之驅(qū)。里奇于1983年被授予圖靈獎,并且于1998年獲得了國家科技勛章。
羅伯介紹說,里奇是一個非常低調(diào)地科研工作者。和喬布斯力圖形成壟斷的個人主義截然不同,里奇一直希望自己的工作能夠為更多的科研工作者所用,能夠為他人日后的科研工作和科技進展提供便利。
克尼漢評價道:牛頓說他是站在巨人的肩膀上,如今,我們都站在里奇的肩膀上。
這句話,應該是對丹尼斯·里奇先生的一生最有力也是最中肯的評價。