C語(yǔ)言之父丹尼斯·里奇逝世
2011年10月12日(農(nóng)歷2011年9月16日),沒(méi)有C語(yǔ)言之父,就沒(méi)有喬布斯和Win10。丹尼斯·里奇,C語(yǔ)言之父,UNIX之父。曾擔(dān)任朗訊科技公司貝爾實(shí)驗(yàn)室下屬的計(jì)算機(jī)科學(xué)研究中心系統(tǒng)軟件研究部的主任一職。1978年與布萊恩·科爾尼干(BrianW.Kernighan)一起出版了名著《C程序設(shè)計(jì)語(yǔ)言(TheCProgrammingLanguage)》,現(xiàn)在此書(shū)已翻譯成多種語(yǔ)言,成為C語(yǔ)言方面最權(quán)威的教材之一。2011年10月12日(北京時(shí)間為10月13日),丹尼斯·里奇去世,享年70歲。丹尼斯·里奇何許人也?普通年輕人可能都要搖頭。丹尼斯·里奇是誰(shuí)?丹尼斯·里奇不像某位來(lái)自硅谷,精致的和少年得志的億萬(wàn)富翁,穿著簡(jiǎn)約黑色的高領(lǐng)毛衣在站滿粉絲的屋子里,演示新酷產(chǎn)品和惡意攻擊對(duì)手。不,丹尼斯·里奇是一位胡子有些凌亂的計(jì)算機(jī)科學(xué)家,他穿著羊毛衫坐在一間凌亂的辦公室里。和喬布斯在大學(xué)輟學(xué)不同,他畢業(yè)于哈佛大學(xué),有物理學(xué)和應(yīng)用數(shù)學(xué)的博士學(xué)位。他工作于新澤西的AT&T貝爾實(shí)驗(yàn)室,而不是閃閃發(fā)光的硅谷。是的,就是“Whatexit?”的新澤西。(編注:“Whatexit?”是新澤西當(dāng)?shù)刭嫡Z(yǔ),GardenStateParkway是一條南北走向的高速公路,它穿過(guò)整個(gè)新澤西州,所以是一個(gè)很有用的地標(biāo)。新澤西當(dāng)?shù)厝藛?wèn)地方都問(wèn)從這條高速的哪個(gè)出口出來(lái)就可以到達(dá)。)鑒于喬布斯古怪的個(gè)性又極富創(chuàng)造力,人們經(jīng)常把他和愛(ài)迪生作比較。我不贊同這種比較,因?yàn)閷?shí)際上我們錯(cuò)把喬布斯當(dāng)做一個(gè)真正的技術(shù)專家和發(fā)明東西的人。有一件重要的事情我們必須要意識(shí)到:盡管喬布斯有他擅長(zhǎng)的事情,而且他為技術(shù)和計(jì)算機(jī)業(yè)界做出很大的貢獻(xiàn),但事實(shí)上他并不是一個(gè)技術(shù)專家。他對(duì)于時(shí)尚和工業(yè)設(shè)計(jì)的確很有感覺(jué),他理解用戶想要什么,他還是一個(gè)營(yíng)銷大師和推銷員。所有這些讓他成為業(yè)界的巨人。但是說(shuō)到發(fā)明家?不,他不是。但是丹尼斯·里奇發(fā)明了和共同發(fā)明了兩個(gè)關(guān)鍵的軟件技術(shù),它們是構(gòu)成每一款計(jì)算機(jī)軟件產(chǎn)品的DNA,現(xiàn)在我們直接或間接都在使用這些軟件產(chǎn)品。這聽(tīng)起來(lái)讓人難以置信,但它確實(shí)是真的。首先,讓我們從《C程序設(shè)計(jì)語(yǔ)言》開(kāi)始C語(yǔ)言是里奇在1969-1973開(kāi)發(fā)的,它被認(rèn)為是第一個(gè)真正意義上可移植的現(xiàn)代編程語(yǔ)言。自它誕生差不多45年以來(lái),它已經(jīng)被移植到幾乎每一個(gè)出現(xiàn)過(guò)的系統(tǒng)架構(gòu)和操作系統(tǒng)上。因?yàn)樗且环N命令的、編譯的和程序化的編程語(yǔ)言,它允許語(yǔ)法變量作用域和遞歸,允許內(nèi)存的底層訪問(wèn),還有復(fù)雜的I/O和字符串操作功能,這種語(yǔ)言變得相當(dāng)通用。里奇和布萊恩·克尼漢(BrianKernighan)對(duì)它進(jìn)行了一定程度的優(yōu)化,最終于1989年被美國(guó)國(guó)家標(biāo)準(zhǔn)協(xié)會(huì)的X3J11委員會(huì)進(jìn)一步細(xì)化為ANSIC程序設(shè)計(jì)語(yǔ)言。1978年,克尼漢和里奇合著出版了《C程序設(shè)計(jì)語(yǔ)言》這本書(shū)。該書(shū)被很多人簡(jiǎn)稱為“K&RC”,是計(jì)算機(jī)科學(xué)的杰作,它也是解釋現(xiàn)代程序設(shè)計(jì)概念的一個(gè)關(guān)鍵參考,甚至到今天,它還是計(jì)算機(jī)科學(xué)課程里學(xué)習(xí)程序設(shè)計(jì)的經(jīng)典教材。直到今天,ANSIC作為一種編程語(yǔ)言還被大量地使用,后來(lái)它還發(fā)展出很多的姊妹語(yǔ)言,這些語(yǔ)言又都有很多的追隨者。最流行的C 是由本賈尼·斯特勞斯特盧普(BjarneStroustrup)于1985年發(fā)明,它增加了面向?qū)ο缶幊毯皖惖闹С?,用在各式各樣的操作系統(tǒng)上,包括像Linux和Mac這樣的UNIX衍生品上,它作為微軟Windows軟件開(kāi)發(fā)的主要編程語(yǔ)言長(zhǎng)達(dá)20多年。Objective-C,是由達(dá)石軟件(Stepstone,Lumesse(路敏思)的前身)的布萊德·考克斯(BradCox)和ToddLove在八十年代發(fā)明的,增加了Smalltalk消息傳遞功能,進(jìn)一步拓展了這種語(yǔ)言面向?qū)ο蠛痛a重用的特性。Objective-C很大程度上被認(rèn)為是一個(gè)鮮為人知的C語(yǔ)言衍生品,直到它在八十年代末和九十年代初被廣泛用于NeXT計(jì)算機(jī)系統(tǒng)公司的NeXTStep和OpenStep操作系統(tǒng)上,NeXT是喬布斯在1985被趕出蘋(píng)果公司后所創(chuàng)辦的?!跋乱粋€(gè)”發(fā)生了什么就是一段計(jì)算機(jī)領(lǐng)域的傳奇。NeXT于1996年被蘋(píng)果公司收購(gòu),喬布斯在1997年重新回歸蘋(píng)果并出任公司的CEO。2001年蘋(píng)果發(fā)布了MacOSX,其中大量使用了Objective-C,以及NeXTStep和OpenStep所引入的面向?qū)ο蠹夹g(shù)。當(dāng)C 也被大量應(yīng)用在Mac上,Objective-C被用來(lái)在XCodeIDE下編寫(xiě)本地面向?qū)ο蟮摹癈ocoa”API,這些API是iOS上手勢(shì)識(shí)別和動(dòng)畫(huà)功能的核心,這些功能為iPhone和iPad增光不少。Objective-C還提供了FoundationKit和ApplicationKit,用于構(gòu)建本地的OSX和iOS應(yīng)用程序。微軟也有自己的C語(yǔ)言衍生品——C#(讀作“CSharp”),于2001年發(fā)明并作為.NET框架的編程基礎(chǔ)。C#還是編寫(xiě)基于Windows運(yùn)行時(shí)(WinRT)的現(xiàn)代應(yīng)用程序的基礎(chǔ),WinRT在Windows10上發(fā)展成統(tǒng)一的Windows平臺(tái)(UWP,UniversalWindowsPlatform)。作為開(kāi)發(fā)Mono(一個(gè).NET框架的可移植版本)的編程環(huán)境,它也被用在Linux和其他Unix衍生系統(tǒng)上。但是C語(yǔ)言的影響并不僅局限在它的衍生品上。Java這樣一個(gè)重要的企業(yè)級(jí)編程語(yǔ)言,在很大程度上也是基于C語(yǔ)言語(yǔ)法(本身也演變?yōu)镈alvik和Android運(yùn)行時(shí),它們是Android最基本的編程環(huán)境)。其它語(yǔ)言例如Ruby、Perl和PHP等,它們是構(gòu)成動(dòng)態(tài)現(xiàn)代網(wǎng)絡(luò)的基礎(chǔ),也都使用了丹尼斯·里奇發(fā)明的C語(yǔ)言語(yǔ)法。所以說(shuō)如果沒(méi)有丹尼斯·里奇的工作,我們根本就不可能有現(xiàn)代的軟件。除了C語(yǔ)言,他還有Unix只談C語(yǔ)言對(duì)于現(xiàn)代計(jì)算的重要性和它對(duì)于每個(gè)人的影響,我其實(shí)就可以結(jié)束這篇文章。但這個(gè)人的工作生涯我才講了一半而已。里奇還是UNIX操作系統(tǒng)的共同發(fā)明人。當(dāng)然UNIX的原型是用匯編語(yǔ)言編寫(xiě),到七十年代早期就完全用C重寫(xiě)了。早在1969年,在一臺(tái)DECPDP-7上引導(dǎo)了第一個(gè)版本的“Unics”,從那開(kāi)始UNIX已經(jīng)演變出很多類似的操作系統(tǒng),并運(yùn)行在各種各樣的系統(tǒng)架構(gòu)上。每一個(gè)主要的計(jì)算機(jī)供應(yīng)商都曾經(jīng)實(shí)現(xiàn)過(guò)自己的UNIX。甚至連微軟也曾經(jīng)擁有一個(gè)叫做XENIX的產(chǎn)品,后來(lái)賣(mài)給了SCO(已經(jīng)不存在了)。你可點(diǎn)擊和放大看這張圖,可更好地理解這個(gè)“家族”。(編注:手機(jī)上無(wú)法查看大圖)UNIX本質(zhì)上有三個(gè)主要分支:第一個(gè)分支是“SystemV”UNIX,現(xiàn)在我們知道的有IBM的AIX、Oracle的Solaris和惠普的HP-UX。這些被認(rèn)為是“大家伙”的操作系統(tǒng)被廣泛應(yīng)用于世界財(cái)富1000強(qiáng)的大企業(yè)里,驅(qū)動(dòng)著關(guān)鍵的、面向交易的商業(yè)應(yīng)用和數(shù)據(jù)庫(kù)。沒(méi)有SystemVUNIX,那些被財(cái)富雜志1000強(qiáng)的企業(yè)不可能完成任何事情。商業(yè)都幾乎停滯了。它們也許只占任何特定企業(yè)百分之十到二十的計(jì)算能力,但是這百分之二十相當(dāng)重要。第二個(gè)分支是BSD(伯克利系統(tǒng)發(fā)行版),包含F(xiàn)reeBSD、NetBSD和OpenBSD,這些都是MaxOSX和iOS的基礎(chǔ)。它們也被用于支持關(guān)鍵的基礎(chǔ)設(shè)施骨干上,互聯(lián)網(wǎng)就運(yùn)行在上面。第三個(gè)分支甚至不能算作一個(gè)分支——GNU/Linux。Linux內(nèi)核(LinusTorvalds開(kāi)發(fā)的)加上GNU用戶空間程序、工具和實(shí)用程序,提供了一個(gè)完全重新實(shí)現(xiàn)的“類似UNIX”,或者說(shuō)“兼容UNIX”的操作系統(tǒng)。當(dāng)然Linux也是所有UNIX操作系統(tǒng)里最具破壞力的。從非常小的嵌入式微處理器到智能手機(jī)、到平板和桌面電腦,甚至強(qiáng)悍的超級(jí)計(jì)算機(jī)都可以看到它的身影。IBM的Watson就是這樣一臺(tái)Linux超級(jí)計(jì)算機(jī),在《冒險(xiǎn)吧!》的眾目睽睽下甚至打敗了KenJennings。但我們還是要認(rèn)識(shí)到Linux和GNU沒(méi)有包含任何UNIX代碼——因此有自由軟件的遞歸短語(yǔ)“GNU’snotUNIX”。(譯者注:GNU是GNU’sNotUNIX的縮寫(xiě),GNU’snotUNIX=>(GNU’sNotUNIX)’sNotUNIX=>((GNU’sNotUNIX)’sNotUNIX)’sNotUNIX=>…,有興趣的話還可以找找其它的,比如PHP、XNA等等)但GNU/Linux在設(shè)計(jì)上表現(xiàn)得很像UNIX,可以說(shuō)如果沒(méi)有里奇和他在貝爾實(shí)驗(yàn)室的同事們(BrianKernighan、KenThompson、DouglasMcllroy和JoeOssanna)一起率先開(kāi)發(fā)出UNIX,也就不會(huì)有什么Linux或者任何一個(gè)開(kāi)放源代碼軟件運(yùn)動(dòng)。從這個(gè)意義上說(shuō),自由軟件基金會(huì)或者RichardStallman很高興看到喬布斯離開(kāi)了。我們虧欠丹尼斯·里奇很多雖然存在宗教和意識(shí)形態(tài)的差異。但我們虧欠丹尼斯·里奇很多,超出我們的想象。沒(méi)有他的貢獻(xiàn),現(xiàn)在我們沒(méi)法用個(gè)人計(jì)算機(jī),成熟的軟件應(yīng)用甚至是互聯(lián)網(wǎng)。沒(méi)有Android智能手機(jī),沒(méi)有昂貴的DVR和流媒設(shè)備,沒(méi)有喬布斯和蘋(píng)果創(chuàng)造令人驚嘆的Mac和iPad。沒(méi)有微軟的Windows10和SurfaceBook。沒(méi)有云計(jì)算、沒(méi)有AWS(亞馬遜網(wǎng)絡(luò)服務(wù),AmazonWebServices),沒(méi)有Azure(微軟云)。沒(méi)有“為XX而生的應(yīng)用程序”,也沒(méi)有互聯(lián)網(wǎng)這個(gè)東西。向丹尼奇·里奇致敬——感謝他帶給我們這些技術(shù),讓我們可以成為今天的專家?!?972年,丹尼斯·里奇(左)與肯·湯姆森在一臺(tái)PDP-12前的合影