C++之父:面向對象的進化與實現
原創【51CTO獨家特稿】如果Bjarne Stroustrup(比雅尼·斯特勞斯特魯普)從A&M大學工程學院離職,他的簡歷上只需一句話就會有一群頂級軟件公司向他拋出橄欖枝:
“Bjarne Stroustrup,C++編程語言的發明者”。
Bjarne 1950年出生在丹麥,對于軟件開發界,丹麥不僅是一個童話王國,還是群星閃耀大師頻出的地方。Delphi和C#之父Anders、Ruby on Rails創始人DHH都是丹麥人。1975年,Bjane獲得丹麥奧胡斯大學的數學和計算機科學碩士學位,又于1979年獲得英國劍橋大學的計算機科學博士學位。
貝爾實驗室
此后20余年,Bjarne一直就職于貝爾實驗室Large-scale Programming(大型程序設計研究部)實驗室。貝爾實驗室的工作可以大致分為三個類別:基礎研究,系統工程和應用開發。Bjarne就職于開發部門,這是貝爾實驗室最大的部門,負責設計構成貝爾系統電信網絡的設備和軟件。
這是一段難得的經歷。上世紀七八十年代,貝爾實驗室一直站在計算機科學和應用軟件開發的前沿,C++之前,這里是Unix系統和C語言的發源地。
1970年,在貝爾實驗室工作的Unix之父Ken Thompson將BCPL語言(BCPL是劍橋大學1963年改造自ALGOL 60的語言)進行了修改,Ken Thompson為它起了一個有趣的名字“B語言”,并用B語言寫了第一個UNIX操作系統。
1972年,貝爾實驗室的D.M.Ritchie在B語言的基礎上最終設計出了一種新的語言,他取了BCPL的第二個字母作為這種語言的名字,這就是C語言。
自1978年貝爾實驗室正式發布C語言以來,C以簡潔緊湊的風格,面向過程的編程方式,豐富的數據結構和強大的底層控制能力獲得迅速發展。到上世紀80年代,C語言已經成為最受歡迎的編程語言;許多著名的系統軟件, 如DBASE Ⅲ PLUS、DBASE Ⅳ 都是由C 語言編寫的。
作為貝爾實驗室開發部門的架構師,Bjarne體會到科學的嚴禁和苛刻,見證了C語言誕生和繁盛的過程;更重要的是,他感受到一門編程語言不僅對項目組的內部工作起到作用,對整個軟件開發界甚至IT產業,都產生推動作用。
面向對象的進化與實現
“沒有銀彈”。C語言當然也存在一些自身無法解決的問題。C語言的缺點主要表現在數據的封裝性上,這一點使得C在數據的安全性上有很大缺陷;C語言的語法限制不太嚴格,對變量的類型約束不嚴格,影響程序的安全性,對數組下標越界不作檢查等。從應用的角度,C語言比其他高級語言較難掌握;此外,作為C語言的一大特色,指針可以說是C語言優于其它高級語言的一個重要原因。就是因為它有指針,可以直接進行靠近硬件的操作,但是C的指針操作也給它帶來了很多不安全的因素
除了上述原因,現實世界的業務需求也在隨著IT業的發展發生著翻天覆地的變化。人們需要新的軟件分析和實現方法;此外,對于開發人員,他們一直被軟件開發的效率問題困擾,軟件如何得到更好更高效的維護?如何讓已有資源的得到更好的復用?
答案是面向對象。面向對象程序設計在某種程度上通過強調可重復性解決了這一問題。向對象程序設計可以被視作一種在程序中包含各種獨立而又互相調用的單位和對象的思想,這與傳統的思想剛好相反:傳統的程序設計主張將程序看作一系列函數的集合,或者直接就是一系列對電腦下達的指令。面向對象程序設計中的每一個對象都應該能夠接受數據、處理數據并將數據傳達給其它對象,因此它們都可以被看作一個小型的“機器”,或者說是負有責任的角色。
C With Class
問題是,這項理論在實際的應用開發中,只有70年代的Smalltalk語言能夠通過內建的功能支持(30年后的今天依然將Smalltalk視為面向對象語言的基礎);現有的主流編程語言在設計和實現方法上都傾向于過程和函數,底層的編譯器無法解釋對象這一概念。
Bjarne在上世紀80年代初期在C語言的基礎上,實現了內建支持面向對象程序設計方法的C with Classes。一開始C++是作為C語言的增強版出現的,從給C語言增加類開始,不斷的增加新特性。虛函數(virtual function)、運算符重載(operator overloading)、多重繼承(multiple inheritance)、模板(template)、異常(exception)、RTTI、命名空間(name space)逐漸被加入標準。
#T#80年代末,C++開始以一門面向對象語言的高級語言的獨立姿態出現在程序員面前,大家被面向對象的編程思想打動,發現原來需求中的問題可以如此脈絡清晰,程序設計也可以如此簡單高效;更重要的是,C++在效率和平臺方面并不比C差(C++與C的效率往往相差在正負5%之間,有人認為在大多數場合C++ 完全可以取代C語言)。面向對象的編程思想開始席卷整個開發領域,標準模板庫(STL)和微軟的VC++平臺推波助瀾,C++開始流行起來。
經過十年的發展,1998年C++標準委員會成立,國際標準組織(ISO)在這一年頒布了C++程序設計語言的國際標準ISO/IEC 1488-1998。C++成為具有國際標準的編程語言,通常稱作ANSI/ISO C++。1998年是C++標準委員會成立的第一年,以后每5年視實際需要更新一次標準。
作為20年盛行不衰的一門編程語言,C++目前還占據這編程語言排行榜前三名的位置。Bjarne Stroustrup寫下了它的早期定義并做出了首個實現,在C++流行之前,Bjarne選擇制定了C++的設計標準,設計了C++主要的輔助支持環境,而且負責處理C++標準委員會的擴展提案。
Bjarne著作等身,其撰寫的多本書籍已成為C++的必讀書籍
而C++對整個軟件開發及IT業的貢獻,不言而喻。憑借這些突出的貢獻,Bjarne Stroustrup獲得了眾多贊譽和獎項:
1990年,Bjarne榮獲《財富》雜志評選的“美國12位最年輕的科學家”稱號。
1993年,由于在C++領域的重大貢獻,Bjarne獲得了ACM該年度的 Grace Murray Hopper大獎并成為ACM院士(成立于1947年的ACM協會是歷史最悠久、目前世界上最大的教育和科學計算協會,成為ACM院士是個人成就的里程碑)。
1995年,BYTE雜志頒予他“近20年來計算機工業最具影響力的20人”的稱號。
目前,C++仍在它所擅長的領域發揮著不可或缺的作用。作為C++之父,Bjarne Stroustrup仍致力于C++標準的改進和推廣,其著作《C++編程語言》、《C++的設計和演化》和《C++加注參考手冊》等已成為C++學習的經典讀物。