一位懷疑論者眼中的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語言超集。在大約同一時間(2023年後,不到三年時間)圍繞相同的目標發展出了另一種語言,即objective-c。在很大程度上,語言之間的差異可以歸結為兩點:
▲它們設計所受的影響
▲它們對早期目標的實現程度
在維基百科的條目中,c++受到了大量語言的影響,這些語言包括c(這很自然), ada 83,algol 68,clu,ml和simula。對大部分c++普通使用者來說,要不加思索地把這些語言列出來可能會有困難,並且即使讓普通c++程式設計師各自列出清單,再從中隨機抽出兩張清單來進行比較,上面列出的語言一般也不盡相同。這些語言對c++的影響在一定程度上被它們對新語言的屈從而掩蓋起來了,並且有一些人可能會提議苦艾酒(absinthe)是另乙個重要的影響。
*purpleendurer注:維基百科中的c++條目
相比之下,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注:關於這次採訪可參考:物件導向是個**?!
在讀到這篇虛構的採訪文章時,人們一時可能會不由地放棄了對「c++真的從一開始就完全是個笑話」的問責。如果是這樣,那麼這個笑話似乎是以objective-c受損為代價的,它默默無聞地徘徊了將近乙個時代——電腦技術的時代——在最終於蘋果軟體開發社群覓得適合的位置之前。事情的事實是,沒有objective-c和cocoa,蘋果公司將幾乎肯定會在尋求支援其平台的開發者時遇到真正的麻煩;在使用這些工具進行開發的過程發現了許多喜悅,這有助於受蘋果公司的法律和市場部門拘束的開發者們克服他們的一些疑慮。
現在有人可能會認為c++的日子屈指可數了。那些看起來似乎更適合於同樣工作的備選方案紛紛湧現,而objective-c作為明顯的直接競爭對手,在某些方面卻是其中最無關緊要的乙個。objective caml經常被舉為高效能語言的乙個棒樣,它經常在基準測試中以顯著幅度領先於c++,提供更加簡潔和組織良好的源**,並向開發者們提供更乾淨、更有趣的開發模式,它甚至不起源於同乙個程式語言家族。d語言旨在參與同一空間的競爭,但其專有根源可能妨礙其廣泛採用。谷歌的go語言雖然作出了有爭議的取捨,但毫無疑問,它在設計上為包括併發在內的某些型別的軟體開發提供了巨大的優勢。
*purpleendurer注:關於objective caml,可參考:ocaml - 維基百科,自由的百科全書
不過,由歷史經驗教訓來看,我傾向於認為在未來一段時間內,c++還有一段漫長、穩定的任期。它甚至偷偷進入作業系統核心開發領域多年,這對那些關心作業系統可靠性之類事情的人來說是乙個可怕的想法。毫無疑問,c++為某些對效能要求較高的程式設計型別提供了一些優於c語言的優勢,並且它的庫支援極其廣泛——堪稱傳奇。儘管如此,至少其對把持開發者的某些力量似乎是基於對替代品的一無所知,這是乙個不會很容易就被潛在競爭對手推到一邊置之不理的特點。(完)
一位懷疑論者眼中的C 發展史
一位懷疑論者眼中的c 發展史 bjarne stroustrup把程式語言c 設計為c語言的乙個改進版,融入了一些增強特性。其中最生要的可能就是內建了物件導向程式設計機制,如該專案早期開發階段的暫定名稱所示 帶類的c c with classes 它大量應用於注重效能的軟體開發,特別是在非常複雜的應...
一位人事經理眼中的國人劣根性
一 人人相輕 中國人不是文人相輕,而是人人相輕,只要想輕視別人,總有相輕的理由。比如北京人輕視外地人,上海人輕視外地人,城裡人輕視農村人,南方人輕視北方人,有錢人輕視窮人,開車的輕視走路的,走路的輕視掃路的,吃飯的輕視做飯的 就是不會相互尊重。在企業裡面,就表現為碩士輕視本科,本科輕視大專,大專輕視...
一位前輩工程師職業發展的忠告
1 好好規劃自己的路,不要跟著感覺走!根據個人的理想決策安排,絕大部分人並不指望成為什麼院士或教授,而是希望活得滋潤一些,爽一些。那麼,就需要慎重安排自己的軌跡。從哪個行業入手,逐漸對該行業深入了解,不要頻繁跳槽,特別是不要為了一點工資而轉移陣地,從長遠看,這點錢根本不算什麼,當你對乙個行業有那麼幾...