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