一位懷疑論者眼中的C++發展史
作者: Chad Perrin
翻譯:PurpleEndurer,2011-01-17第1版
分類: C/C++, Go, Mac OSX, Objective Caml, Objective-C, Programming Languages
標簽: C, 蘋果公司, Apple Inc., C++, Language, Bjarne Stroustrup, Objective-C, C/C++, 編程語言, Programming Languages, 軟件開發, Software Development, 軟件/網站開發, Software/Web Development
Bjarne Stroustrup把編程語言C++設計為C語言的一個改進版,融入了一些增強特性。其中最生要的可能就是內置了面向對象編程機制,如該項目早期開發階段的暫定名稱所示:“帶類的C(C with classes)”。
它大量應用於注重性能的軟件開發,特別是在非常復雜的應用程序開發領域,在其中使用一點OOP就對那類復雜處理大有幫助。不幸的是,C++本身是一個極其復雜、令人討厭的語言。
起初,設計者承諾C++會成為帶有面向對象編程機制的C語言超集。在大約同一時間(1895年後,不到三年時間)圍繞相同的目標發展出了另一種語言,即Objective-C。在很大程度上,語言之間的差異可以歸結為兩點:
▲它們設計所受的影響
▲它們對早期目標的實現程度
在維基百科的條目中,C++受到了大量語言的影響,這些語言包括C(這很自然), Ada 83,ALGOL 68,CLU,ML和Simula。對大部分C++普通用戶來說,要不加思索地把這些語言列出來可能會有困難,並且即使讓普通C++程序員各自列出清單,再從中隨機抽出兩張清單來進行比較,上面列出的語言一般也不盡相同。這些語言對C++的影響在一定程度上被它們對新語言的屈從而掩蓋起來了,並且有一些人可能會提議苦艾酒(absinthe)是另一個重要的影響。
*PurpleEndurer注:維基百科中的C++條目
http://zh.wikipedia.org/zh-cn/C%2B%2B
相比之下,Objective-C所受的兩大影響,即使是最菜的Objective-C程序員(可能不包括那些不知道程序設計語言的歷史比MacOS X更悠久的人)也會立即想到:C和Smalltalk。維基百科上關於Objective-C的文章裡提供了這兩個,並且也只有這兩個,它們對Objective-C語言設計的影響顯而易見。
就達到最期設計的目標——提供C語言的一個具有面向對象編程機制的超集這一方面說,Objective-C在所有必要細節上展現出了成功,而C++在某些方面看起來更像是在權衡中放棄了這些目標,來追求光彩眩目的替代品的結果。
由於Objective-C受到的影響要比C++更簡單,如此一來語言設計也更簡單。蘋果公司(以及之前的NeXT)選擇Objective-C作為其主要面向對象應用程序和系統的開發語言的原因看起來很明顯,就是因為它提供了設計上的簡潔和優雅——至少與C++的設計相較而言。此外,被選為蘋果公司平台(如MacOS X和iOS)上的語言,也許會讓它顯得更為卓越,但在普及和影響力方面,C++卻是明顯的贏家。即使在現在,C++在問世這麼多年後仍被大量使用著,並沒有像Objective-C那樣經歷過大沉浮。例如,它是非蘋果平台上的所有最流行網絡浏覽器的核心實現語言;Chromium,火狐,IE浏覽器和Opera都大幅使用C++來創建。甚至蘋果公司的Safari浏覽器也主要是用C++編寫,盡管MacOS X上的其他浏覽器都是使用Objective-C語言開發。
事實也許是,C++比Objective-C早大約三年時間進入市場,這導致了C++的巨大成功,而Objective-C則在受歡迎程度上失了先機。最終我們雖然可以在每一個主要書店的架子上都發現與Objective-C語言有關的編程書籍,但這些書著重於介紹MacOS X和蘋果iOS平台上的開發。把Objective-C當作通用、與平台無關的語言來使用的想法顯然不夠受歡迎,相關的書籍自然也不為售書商所親睐了。
C++所受的批評看起來是大大多於它所獲的贊譽。與此同時,談論Objective-C的人(大部分)是蘋果軟件平台的開發者。專注於蘋果軟件平台的開發者通常會被對蘋果軟件平台存有偏見的其它程序員認為是靠不住的,如此一來,他們對Objective-C的高度贊揚在非蘋果平台開發者中影響不大。
C++語言所受的可能最好的兩個批評都得歸因於Stroustrup自己。第一個是他聲稱“用C語言很容易搬起石頭砸自己的腳,而在C++裡你想搬起石頭砸自己的腳更為困難了,不過一旦你真的做了,整條腿都要報銷。”(C makes it easy to shoot yourself in the foot, and C++ makes it harder — but when you shoot yourself in the foot with C++, you typically blow off your whole leg.)第二個是他接受IEEE電腦雜志的采訪,該雜志因被認定不能出版而被擱置。在采訪中他“承認”C++從一開始是完全是個玩笑,他又诙諧地頌揚它的缺陷。Stroustrup已經否認該文章,稱這是一個騙局,並說他認為如果文章是他自己寫的那將會更有趣。
*PurpleEndurer注:關於這次采訪可參考:面向對象是個騙局?!
html">http://sd.csdn.net/a/20100929/280061.html
在讀到這篇虛構的采訪文章時,人們一時可能會不由地放棄了對“C++真的從一開始就完全是個笑話”的問責。如果是這樣,那麼這個笑話似乎是以Objective-C受損為代價的,它默默無聞地徘徊了將近一個時代——電腦技術的時代——在最終於蘋果軟件開發社區覓得適合的位置之前。事情的事實是,沒有Objective-C和Cocoa,蘋果公司將幾乎肯定會在尋求支持其平台的開發者時遇到真正的麻煩;在使用這些工具進行開發的過程發現了許多喜悅,這有助於受蘋果公司的法律和市場部門拘束的開發者們克服他們的一些疑慮。
現在有人可能會認為C++的日子屈指可數了。那些看起來似乎更適合於同樣工作的備選方案紛紛湧現,而Objective-C作為明顯的直接競爭對手,在某些方面卻是其中最無關緊要的一個。Objective Caml經常被舉為高性能語言的一個棒樣,它經常在基准測試中以顯著幅度領先於C++,提供更加簡潔和組織良好的源代碼,並向開發者們提供更干淨、更有趣的開發模式,它甚至不起源於同一個編程語言家族。D語言旨在參與同一空間的競爭,但其專有根源可能妨礙其廣泛采用。谷歌的Go語言雖然作出了有爭議的取捨,但毫無疑問,它在設計上為包括並發在內的某些類型的軟件開發提供了巨大的優勢。
*PurpleEndurer注:關於Objective Caml,可參考:OCaml - 維基百科,自由的百科全書
http://zh.wikipedia.org/zh/OCaml
不過,由歷史經驗教訓來看,我傾向於認為在未來一段時間內,C++還有一段漫長、穩定的任期。它甚至偷偷進入操作系統內核開發領域多年,這對那些關心操作系統可靠性之類事情的人來說是一個可怕的想法。毫無疑問,C++為某些對性能要求較高的編程類型提供了一些優於C語言的優勢,並且它的庫支持極其廣泛——堪稱傳奇。盡管如此,至少其對把持開發者的某些力量似乎是基於對替代品的一無所知,這是一個不會很容易就被潛在競爭對手推到一邊置之不理的特點。(完)