紀念C語言之父丹尼斯·里奇離世6周年
不知不覺, 丹尼斯·里奇離開我們 6 年了。2011 年 10 月 12 日,和里奇共事 20 多年的同事 Rob Pike 從加州到新澤西去拜訪他,才發現他已經去世了。由于是獨居,當時無法知道準確的死亡時間,后來確定離世日期是 10 月 9 日。據他的兄弟透露,那幾年丹尼斯·里奇的健康狀況一直不好,他患有前列腺癌和心臟病。
喬布斯和丹尼斯·里奇都是在同年同月離世。之后每年的這段時間,很多媒體都會紀念喬布斯,但很少提到丹尼斯·里奇。
【重溫一篇舊文,借以紀念】
如果沒有丹尼斯·里奇(Dennis Ritchie),就不會有我們現在所熟知的現代計算。他是 C 語言之父和 UNIX 操作系統的聯合發明人。六年前我們失去了兩位對業界有巨大影響的人。
(其實 Lisp 之父約翰·麥卡錫也是在 2011 年 10 月離世。10 月 24 日)
不可否認,喬布斯帶給我們世上從未見過的創新和標志性的產品,還有一大批對他頂禮膜拜的狂熱消費者和終端用戶。諸如此類的事情可能再也看不到了。
盡管我對喬布斯和他的公司有看法是有據可查的,當他去世時,我和很多業界的人一樣表達了我的敬意和對他的影響力的認可。
但是蘋果和喬布斯以及很多其他公司所創造的“神奇的”產品,和所有現在我們了解和寫在現代計算里的東西,都要歸功于丹尼斯·里奇,他于 2011 年 10 月 12 號離開人世,享年 70 歲。
丹尼斯·里奇何許人也?
普通年輕人可能都要搖頭。丹尼斯·里奇是誰?
丹尼斯·里奇不像某位來自硅谷,精致的和少年得志的億萬富翁,穿著簡約黑色的高領毛衣在站滿粉絲的屋子里,演示新酷產品和惡意攻擊對手。
不,丹尼斯·里奇是一位胡子有些凌亂的計算機科學家,他穿著羊毛衫坐在一間凌亂的辦公室里。
和喬布斯在大學輟學不同,他畢業于哈佛大學,有物理學和應用數學的博士學位。他工作于新澤西的 AT&T 貝爾實驗室,而不是閃閃發光的硅谷。
是的,就是 “What exit?” 的新澤西。(編注:“What exit?”是新澤西當地俚語,Garden State Parkway 是一條南北走向的高速公路,它穿過整個新澤西州,所以是一個很有用的地標。新澤西當地人問地方都問從這條高速的哪個出口出來就可以到達。)
鑒于喬布斯古怪的個性又極富創造力,人們經常把他和愛迪生作比較。我不贊同這種比較,因為實際上我們錯把喬布斯當做一個真正的技術專家和發明東西的人。
有一件重要的事情我們必須要意識到:盡管喬布斯有他擅長的事情,而且他為技術和計算機業界做出很大的貢獻,但事實上他并不是一個技術專家。
他對于時尚和工業設計的確很有感覺,他理解用戶想要什么,他還是一個營銷大師和推銷員。所有這些讓他成為業界的巨人。
但是說到發明家?不,他不是。
但是丹尼斯·里奇發明了和共同發明了兩個關鍵的軟件技術,它們是構成每一款計算機軟件產品的 DNA,現在我們直接或間接都在使用這些軟件產品。這聽起來讓人難以置信,但它確實是真的。
首先,讓我們從《 C 程序設計語言》開始
C 語言是里奇在 1969-1973 開發的,它被認為是第一個真正意義上可移植的現代編程語言。自它誕生差不多 45 年以來,它已經被移植到幾乎每一個出現過的系統架構和操作系統上。
因為它是一種命令的、編譯的和程序化的編程語言,它允許語法變量作用域和遞歸,允許內存的底層訪問,還有復雜的 I/O 和字符串操作功能,這種語言變得相當通用。
里奇和布萊恩·克尼漢(Brian Kernighan)對它進行了一定程度的優化,最終于 1989 年被美國國家標準協會的 X3J11 委員會進一步細化為 ANSI C 程序設計語言。
1978 年,克尼漢和里奇合著出版了《C 程序設計語言》這本書。該書被很多人簡稱為 “K&R C” ,是計算機科學的杰作,它也是解釋現代程序設計概念的一個關鍵參考,甚至到今天,它還是計算機科學課程里學習程序設計的經典教材。
直到今天, ANSI C 作為一種編程語言還被大量地使用,后來它還發展出很多的姊妹語言,這些語言又都有很多的追隨者。
最流行的 C++ 是由本賈尼·斯特勞斯特盧普(Bjarne Stroustrup) 于 1985 年發明,它增加了面向對象編程和類的支持,用在各式各樣的操作系統上,包括像 Linux 和 Mac 這樣的 UNIX 衍生品上,它作為微軟 Windows 軟件開發的主要編程語言長達 20 多年。
Objective-C,是由達石軟件(Stepstone,Lumesse(路敏思)的前身)的布萊德·考克斯(Brad Cox) 和 Todd Love 在八十年代發明的,增加了 Smalltalk 消息傳遞功能,進一步拓展了這種語言面向對象和代碼重用的特性。
Objective-C 很大程度上被認為是一個鮮為人知的 C 語言衍生品,直到它在八十年代末和九十年代初被廣泛用于 NeXT 計算機系統公司的 NeXTStep 和 OpenStep 操作系統上,NeXT 是喬布斯在 1985 被趕出蘋果公司后所創辦的。
“下一個”發生了什么就是一段計算機領域的傳奇。NeXT 于 1996 年被蘋果公司收購,喬布斯在 1997 年重新回歸蘋果并出任公司的 CEO。
2001 年蘋果發布了 Mac OS X,其中大量使用了 Objective-C ,以及 NeXTStep 和 OpenStep 所引入的面向對象技術。
當 C++ 也被大量應用在 Mac 上,Objective-C 被用來在 XCode IDE 下編寫本地面向對象的 “Cocoa” API ,這些 API 是 iOS 上手勢識別和動畫功能的核心,這些功能為 iPhone 和 iPad 增光不少。
Objective-C 還提供了 Foundation Kit 和 Application Kit,用于構建本地的 OS X 和 iOS 應用程序。
微軟也有自己的 C 語言衍生品—— C# (讀作 “C Sharp”),于 2001 年發明并作為 .NET 框架的編程基礎。
C# 還是編寫基于 Windows 運行時(WinRT)的現代應用程序的基礎,WinRT 在 Windows 10 上發展成統一的 Windows 平臺(UWP, Universal Windows Platform)。作為開發 Mono(一個 .NET 框架的可移植版本)的編程環境,它也被用在 Linux 和其他 Unix 衍生系統上。
但是 C 語言的影響并不僅局限在它的衍生品上。Java 這樣一個重要的企業級編程語言,在很大程度上也是基于 C 語言語法(本身也演變為 Dalvik 和 Android 運行時,它們是 Android 最基本的編程環境)。
其它語言例如 Ruby、Perl 和 PHP 等,它們是構成動態現代網絡的基礎,也都使用了丹尼斯·里奇發明的 C 語言語法。
所以說如果沒有丹尼斯·里奇的工作,我們根本就不可能有現代的軟件。
除了 C 語言,他還有 Unix
只談 C 語言對于現代計算的重要性和它對于每個人的影響,我其實就可以結束這篇文章。但這個人的工作生涯我才講了一半而已。
里奇還是 UNIX 操作系統的共同發明人。當然 UNIX 的原型是用匯編語言編寫,到七十年代早期就完全用 C 重寫了。
早在 1969 年,在一臺 DEC PDP-7 上引導了第一個版本的“Unics”,從那開始 UNIX 已經演變出很多類似的操作系統,并運行在各種各樣的系統架構上。
每一個主要的計算機供應商都曾經實現過自己的 UNIX。甚至連微軟也曾經擁有一個叫做 XENIX 的產品,后來賣給了 SCO(已經不存在了)。
你可看這張圖,可更好地理解這個“家族”。
UNIX 本質上有三個主要分支:
第一個分支是“System V” UNIX,現在我們知道的有 IBM 的 AIX、Oracle 的 Solaris 和惠普的 HP-UX。這些被認為是“大家伙”的操作系統被廣泛應用于世界財富 1000 強的大企業里,驅動著關鍵的、面向交易的商業應用和數據庫。
沒有 System V UNIX,那些被財富雜志 1000 強的企業不可能完成任何事情。商業都幾乎停滯了。它們也許只占任何特定企業百分之十到二十的計算能力,但是這百分之二十相當重要。
第二個分支是 BSD (伯克利系統發行版),包含 FreeBSD、NetBSD 和 OpenBSD,這些都是 Max OS X 和 iOS 的基礎。它們也被用于支持關鍵的基礎設施骨干上,互聯網就運行在上面。
第三個分支甚至不能算作一個分支——GNU/Linux。Linux 內核(Linus Torvalds 開發的)加上 GNU 用戶空間程序、工具和實用程序,提供了一個完全重新實現的“類似 UNIX” ,或者說“兼容 UNIX”的操作系統。
當然 Linux 也是所有 UNIX 操作系統里最具破壞力的。從非常小的嵌入式微處理器到智能手機、到平板和桌面電腦,甚至強悍的超級計算機都可以看到它的身影。
IBM 的 Watson 就是這樣一臺 Linux 超級計算機,在《冒險吧!》的眾目睽睽下甚至打敗了 Ken Jennings。
但我們還是要認識到 Linux 和 GNU 沒有包含任何 UNIX 代碼——因此有自由軟件的遞歸短語 “GNU’s not UNIX”。(譯者注:GNU 是 GNU’s Not UNIX 的縮寫,GNU’s not UNIX => (GNU’s Not UNIX)’s Not UNIX => ((GNU’s Not UNIX)’s Not UNIX)’s Not UNIX => …,有興趣的話還可以找找其它的,比如 PHP、XNA 等等)
但 GNU/Linux 在設計上表現得很像 UNIX,可以說如果沒有里奇和他在貝爾實驗室的同事們(Brian Kernighan、Ken Thompson、Douglas Mcllroy 和 Joe Ossanna)一起率先開發出 UNIX,也就不會有什么 Linux 或者任何一個開放源代碼軟件運動。
從這個意義上說,自由軟件基金會或者 Richard Stallman 很高興看到喬布斯離開了。
我們虧欠丹尼斯·里奇很多
雖然存在宗教和意識形態的差異。但我們虧欠丹尼斯·里奇很多,超出我們的想象。沒有他的貢獻,現在我們沒法用個人計算機,成熟的軟件應用甚至是互聯網。
沒有 Android 智能手機,沒有昂貴的 DVR 和流媒設備,沒有喬布斯和蘋果創造令人驚嘆的 Mac 和 iPad。
沒有微軟的 Windows 10 和 Surface Book。
沒有云計算、沒有 AWS(亞馬遜網絡服務,Amazon Web Services),沒有 Azure(微軟云)。
沒有“為 XX 而生的應用程序”,也沒有互聯網這個東西。
向丹尼奇·里奇致敬 —— 感謝他帶給我們這些技術,讓我們可以成為今天的專家。
1972 年,丹尼斯·里奇(左)與肯·湯姆森在一臺 PDP-12 前的合影 (照片來源:丹尼斯里奇的主頁)
來自: mp.weixin.qq.com