歷史上的10月12日發生的大事件

C語言之父丹尼斯·裡奇逝世

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