• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            天行健 君子當(dāng)自強(qiáng)而不息

            【ZT】C++之父B. Stroustrup近期言論


            [譯者按]  Bjarne Stroustrup博士,1950年出生于丹麥,先后畢業(yè)于丹麥阿魯斯大學(xué)和英國(guó)劍橋大學(xué),AT&T大規(guī)模程序設(shè)計(jì)研究部門(mén)負(fù)責(zé)人, AT&T、貝爾實(shí)驗(yàn)室和ACM成員。1979年,B. S開(kāi)始開(kāi)發(fā)一種語(yǔ)言,當(dāng)時(shí)稱為“C with Class”,后來(lái)演化為C++。1998年,ANSI/ISO C++標(biāo)準(zhǔn)建立,同年,B. S推出了其經(jīng)典著作The C++ Programming Language的第三版。C++的標(biāo)準(zhǔn)化標(biāo)志著B(niǎo). S博士?jī)A20年心血的偉大構(gòu)想終于實(shí)現(xiàn)。但是,計(jì)算技術(shù)的發(fā)展一日千里,就在幾年前人們還猜想C++最終將一統(tǒng)天下,然而隨著Internet的爆炸性增長(zhǎng),類似Java、C#等新的、現(xiàn)代感十足的語(yǔ)言咄咄逼人,各種Script語(yǔ)言更是如雨后春筍紛紛涌現(xiàn)。在這種情況下,人們不禁有些惶恐不安。C++是不是已經(jīng)過(guò)時(shí)了呢?其前景如何?標(biāo)準(zhǔn)C++有怎樣的意義?應(yīng)該如何學(xué)習(xí)?我們不妨看看B. S對(duì)這些問(wèn)題的思考。以下文字是譯者從Stroustrup1998年之后發(fā)表的若干文章、談話筆記中精選出來(lái)的,由于出處不一,內(nèi)容多有重復(fù),為保持完整,亦一并譯出。

            以下內(nèi)容選自B. S在自己主頁(yè)上發(fā)表的FAQ

            1. 請(qǐng)談?wù)凜++書(shū)。

            沒(méi)有,也不可能有一本書(shū)對(duì)于所有人來(lái)說(shuō)都是最好的。不過(guò)對(duì)于那些真正的程序員來(lái)說(shuō),如果他喜歡從“經(jīng)典風(fēng)格”的書(shū)中間學(xué)習(xí)一些新的概念和技術(shù),我推薦我的 The C++ Programming Language, 1998年的第三版和特別版。那本書(shū)講的是純而又純的C++,完全獨(dú)立于平臺(tái)和庫(kù)(當(dāng)然得講到標(biāo)準(zhǔn)庫(kù))。該書(shū)面向那些有一定經(jīng)驗(yàn)的程序員,幫助他們掌握C ++,但不適合毫無(wú)經(jīng)驗(yàn)的初學(xué)者入門(mén),也不適合那些臨時(shí)程序員品嘗C++快餐。所以這本書(shū)的重點(diǎn)在于概念和技術(shù),而且在完整性和精確性上下了不少功夫。如果你想知道為什么C++會(huì)變成今天的模樣,我的另一本書(shū)The Design and Evolution of C++ 能給你滿意的答案。理解設(shè)計(jì)的原則和限制能幫助你寫(xiě)出更好的程序。www.accu.com是最好的書(shū)評(píng)網(wǎng)站之一,很多有經(jīng)驗(yàn)的程序員在此仗義執(zhí)言,不妨去看看。

            2. 學(xué)習(xí)C++要花多長(zhǎng)時(shí)間?

            這要看你說(shuō)的“學(xué)習(xí)”是什么意思了。如果你是一個(gè)Pascal程序員,你應(yīng)該能很快地使你的C++水平達(dá)到與Pascal相近的程度;而如果你是一個(gè)C程序員,一天之內(nèi)你就能學(xué)會(huì)使用C++進(jìn)行更出色的C風(fēng)格編程。另一方面,如果你想完全掌握C++的主要機(jī)制,例如數(shù)據(jù)抽象,面向?qū)ο缶幊蹋ㄓ镁幊?,面向?qū)ο笤O(shè)計(jì)等等,而此前又對(duì)這些東西不很熟悉的話,花上個(gè)一兩年是不足為奇的。那么是不是說(shuō)這就是學(xué)習(xí)C++所需要的時(shí)間呢?也許再翻一番,我想打算成為更出色的設(shè)計(jì)師和程序員最起碼也要這么長(zhǎng)的時(shí)間。如果學(xué)習(xí)一種新的語(yǔ)言不能使我們的工作和思想方式發(fā)生深刻的變革,那又何苦來(lái)哉?跟成為一個(gè)鋼琴家或者熟練掌握一門(mén)外語(yǔ)相比,學(xué)習(xí)一種新的、不同的語(yǔ)言和編程風(fēng)格還算是簡(jiǎn)單的。

            3. 了解C是學(xué)習(xí)C++的先決條件嗎?

            否!C++中與C相近的子集其實(shí)比C語(yǔ)言本身要好學(xué),類型方面的錯(cuò)誤會(huì)少一些,也不像C那樣繞圈子,還有更好的支持庫(kù)。所以應(yīng)該從這個(gè)子集開(kāi)始學(xué)習(xí)C++。

            4. 要想成為真正的OO程序員,我是不是得先學(xué)習(xí)Smalltalk?

            否。如果你想學(xué)Smalltaok,盡管去學(xué)。這種語(yǔ)言很有趣,而且學(xué)習(xí)新東西總是一個(gè)好主意。但是Smalltalk不是C++,而且把Smalltalk 的編程風(fēng)格用在C++里不會(huì)有什么好結(jié)果。如果你想成為一個(gè)出色的C++程序員,而且也沒(méi)有幾個(gè)月的時(shí)間百無(wú)聊賴,請(qǐng)你集中力量學(xué)好C++以及其背后的思想。

            5. 我如何開(kāi)始學(xué)習(xí)C++?

            這取決于你的基礎(chǔ)和學(xué)習(xí)動(dòng)機(jī)。如果你是個(gè)初學(xué)者,我想你最好找個(gè)有經(jīng)驗(yàn)的程序員來(lái)幫助你,要不然你在學(xué)習(xí)和實(shí)踐中不可避免的犯下的種種錯(cuò)誤會(huì)大大地打擊你的積極性。另外,即使你的編譯器配備了充足的文檔資料,一本C++書(shū)籍也永遠(yuǎn)是必不可少的,畢竟文檔資料不是學(xué)習(xí)編程思想的好教材。

            選擇書(shū)籍時(shí),務(wù)必注意該書(shū)是不是從一開(kāi)始就講授標(biāo)準(zhǔn)C++,并且矢志不渝地使用標(biāo)準(zhǔn)庫(kù)機(jī)制。例如,從輸入中讀取一個(gè)字符串應(yīng)該是這樣的:
             string s; // Standard C++ style
             cin >> s;
            而不是這樣的:
             char s[MAX];  /* Standard C style */
             scanf("%s",s);
            去看看那些扎實(shí)的C++程序員們推薦的書(shū)吧。記住,沒(méi)有哪本書(shū)對(duì)所有人來(lái)說(shuō)都是最好的。
            另外,要寫(xiě)地道的C++程序,而避免用C++的語(yǔ)法寫(xiě)傳統(tǒng)風(fēng)格的程序,新瓶裝舊酒沒(méi)多大意義。
            (遺憾的是,目前在市面上的中文C++教材中,符合B. S的這個(gè)標(biāo)準(zhǔn)的可以說(shuō)一本都沒(méi)有,大家只好到網(wǎng)上找一些英文的資料來(lái)學(xué)習(xí)了?!g者)

            6. 怎樣改進(jìn)我的C++程序?

            不好說(shuō)。這取決于你是怎么使用該語(yǔ)言的。大多數(shù)人低估了抽象類和模板的價(jià)值,反過(guò)來(lái)卻肆無(wú)忌憚地使用造型機(jī)制(cast)和宏。這方面可以看看我的文章和書(shū)。抽象類和和模板的作用當(dāng)然是提供一種方便的手段建構(gòu)單根的類層次或者重用函數(shù),但更重要的是,它們作為接口提供了簡(jiǎn)潔的、邏輯性的服務(wù)表示機(jī)制。

            7. 語(yǔ)言的選擇是不是很重要?

            是,但也別指望奇跡。很多人似乎相信某一種語(yǔ)言能夠解決他們?cè)谙到y(tǒng)開(kāi)發(fā)中遇到的幾乎所有問(wèn)題,他們不斷地去尋找完美的編程語(yǔ)言,然后一次次的失敗,一次次的沮喪。另外一些人則將編程語(yǔ)言貶為無(wú)關(guān)緊要的細(xì)節(jié),把大把大把的銀子放在開(kāi)發(fā)流程和設(shè)計(jì)方法上,他們永遠(yuǎn)都在用著COBOL, C和一些專有語(yǔ)言。一種優(yōu)秀的語(yǔ)言,例如C++,能幫助設(shè)計(jì)者和程序員做很多事情,而其能力和缺陷又能夠被清楚地了解和對(duì)待。

            8. ANSI/ISO標(biāo)準(zhǔn)委員會(huì)是不是糟蹋了C++?

            當(dāng)然不是!他們(我們)的工作很出色。你可以在一些細(xì)節(jié)上找些歪理來(lái)挑刺,但我個(gè)人對(duì)于這種語(yǔ)言以及新的標(biāo)準(zhǔn)庫(kù)可是欣欣然。ISO C++較之C++的以前版本更出色更有條理。相對(duì)于標(biāo)準(zhǔn)化過(guò)程剛剛開(kāi)始之初,你今天可以寫(xiě)出更優(yōu)雅、更易于維護(hù)的C++程序。新的標(biāo)準(zhǔn)庫(kù)也是一份真正的大禮。由于標(biāo)準(zhǔn)庫(kù)提供了strings, lists, vectors, maps以及作用于其上的基本算法,使用C++的方式已經(jīng)發(fā)生了巨大的變化。

            9. 你現(xiàn)在有沒(méi)有想刪除一些C++特性?

            沒(méi)有,真的。問(wèn)這些問(wèn)題的人大概是希望我回答下面特性中的一個(gè):多繼承、異常、模板和RTTI。但是沒(méi)有它們,C++就是不完整的。在過(guò)去的N年中,我已經(jīng)反復(fù)考慮過(guò)它們的設(shè)計(jì),并且與標(biāo)準(zhǔn)委員會(huì)一起改進(jìn)了其細(xì)節(jié),但是沒(méi)有一個(gè)能被去掉又不引起大地震。

            從語(yǔ)言設(shè)計(jì)的角度講,我最不喜歡的部分是與C兼容的那個(gè)子集,但又不能把它去掉,因?yàn)槟菢訉?duì)于在現(xiàn)實(shí)世界里工作的程序員們來(lái)說(shuō)傷害太大了。C++與C兼容,這是一項(xiàng)關(guān)鍵的設(shè)計(jì)決策,絕對(duì)不是一個(gè)叫賣(mài)的噱頭。兼容性的實(shí)現(xiàn)和維護(hù)是十分困難的,但確實(shí)使程序員們至今受益良多。但是現(xiàn)在,C++已經(jīng)有了新的特性,程序員們可以從麻煩多多的C風(fēng)格中解脫出來(lái)。例如,使用標(biāo)準(zhǔn)庫(kù)里的容器類,象vector, list, map, string等等,可以避免與底層的指針操作技巧混戰(zhàn)不休。

            10. 如果不必和C兼容,你所創(chuàng)造的語(yǔ)言是不是就會(huì)是Java?

            不是,差得遠(yuǎn)。如果人們非要拿C++和Java來(lái)作比較,我建議他們?nèi)ラ喿xThe Design and Evolution of C++,看看C++為什么是今天這個(gè)樣子,用我在設(shè)計(jì)C++時(shí)遵從的原則來(lái)檢驗(yàn)這兩種語(yǔ)言。這些原則與SUN的Java開(kāi)發(fā)小組所持的理念顯然是不同的。除了表面語(yǔ)法的相似性之外,C++與Java是截然不同的語(yǔ)言。在很多方面,Java更像Smalltalk(譯者按:我學(xué)習(xí)Java時(shí)用的是Sun的培訓(xùn)教材,里面清楚地寫(xiě)道:Java在設(shè)計(jì)上采用了與C++相似的語(yǔ)法,與Smalltalk相似的語(yǔ)義。所以可以說(shuō)Java與C++是貌合神離,與 Smalltalk才是心有靈犀)。Java語(yǔ)言相對(duì)簡(jiǎn)單,這部分是一種錯(cuò)覺(jué),部分是因?yàn)檫@種語(yǔ)言還不完整。隨著時(shí)間的推移,Java在體積和復(fù)雜程度上都會(huì)大大增長(zhǎng)。在體積上它會(huì)增長(zhǎng)兩到三倍,而且會(huì)出現(xiàn)一些實(shí)現(xiàn)相關(guān)的擴(kuò)展或者庫(kù)。這是一條每個(gè)成功的商業(yè)語(yǔ)言都必須走過(guò)的發(fā)展之路。隨便分析一種你認(rèn)為在很大范圍內(nèi)取得了成功的語(yǔ)言,我知道肯定是無(wú)有例外者,而且實(shí)際上這非常有道理。

            上邊這段話是在Java 1.1推出之前寫(xiě)的。我確信Java需要類似模板的機(jī)制,并且需要增強(qiáng)對(duì)于固有類型的支持。簡(jiǎn)單地說(shuō),就是為了基本的完整性也應(yīng)該做這些工作。另外還需要做很多小的改動(dòng),大部分是擴(kuò)展。1998年秋,我從James Gosling(Java語(yǔ)言的創(chuàng)始人——譯者)那里得到一份建議書(shū),說(shuō)是要在Java中增加固有類型、操作符重載以及數(shù)學(xué)計(jì)算支持。還有一篇論文,是數(shù)學(xué)分析領(lǐng)域的世界級(jí)大師,伯克利大學(xué)的W. Kahan教授所寫(xiě)的How Java’s Floating-Point Hurts Everyone Everywhere(“且看Java的浮點(diǎn)運(yùn)算如何危害了普天下的蕓蕓眾生”——譯者),揭露了Java的一些秘密。

            我發(fā)現(xiàn)在電視和出版物中關(guān)于Java的鼓吹是不準(zhǔn)確的,而且氣勢(shì)洶洶,讓人討厭。大肆叫囂凡是非Java的代碼都是垃圾,這是對(duì)程序員的侮辱;建議把所有的保留代碼都用Java重寫(xiě),這是喪心病狂,既不現(xiàn)實(shí)也不負(fù)責(zé)任。Sun和他的追隨者似乎覺(jué)得為了對(duì)付微軟罪惡的“帝國(guó)時(shí)代”,就必須如此自吹自擂。但是侮辱和欺詐只會(huì)把那些喜歡使用不同編程語(yǔ)言的程序員逼到微軟陣營(yíng)里去。

            Java并非平臺(tái)無(wú)關(guān),它本身就是平臺(tái)。跟Windows一樣,它也是一個(gè)專有的商業(yè)平臺(tái)。也就是說(shuō),你可以為Windows/Intel編寫(xiě)代碼,也可以為Java/JVM編寫(xiě)代碼,在任何一種情況下,你都是在為一個(gè)屬于某個(gè)公司的平臺(tái)寫(xiě)代碼,這些代碼都是與該公司的商業(yè)利益扯在一起的。當(dāng)然你可以使用任何一種語(yǔ)言,結(jié)合操作系統(tǒng)的機(jī)制來(lái)編寫(xiě)可供JVM執(zhí)行的程序,但是JVM之類的東西是強(qiáng)烈地偏向于Java語(yǔ)言的。它一點(diǎn)也不像是通用的、公平的、語(yǔ)言中立的VM/OS。

            私下里,我會(huì)堅(jiān)持使用可移植的C++作大部分工作,用不同的語(yǔ)言作余下的工作。
            (”Java is not platform-independent, it is the platform”,B. S的這句評(píng)語(yǔ)對(duì)于C++用戶有著很大的影響,譯者在國(guó)外的幾個(gè)新聞組里看到,有些C++高手甚至把這句話作為自己的簽名檔,以表明對(duì)Java的態(tài)度和誓死捍衛(wèi)C++的決心。實(shí)際上有很多程序員不光是把自己喜愛(ài)的語(yǔ)言當(dāng)成一種工具,更當(dāng)成一種信仰。——譯者)

            11. 您怎么看待C#語(yǔ)言?

            就C#語(yǔ)言本身我沒(méi)什么好說(shuō)的。想讓我相信這個(gè)世界還需要另外一個(gè)專有的語(yǔ)言可不是一件容易的事,而且這個(gè)語(yǔ)言還是專門(mén)針對(duì)某一個(gè)專有操作系統(tǒng)的,這就更讓我難以接受。直截了當(dāng)?shù)卣f(shuō),我不是一個(gè)專有語(yǔ)言的癡迷者,而是一個(gè)開(kāi)放的正式標(biāo)準(zhǔn)的擁護(hù)者。

            12. 在做大項(xiàng)目時(shí),您是不是真的推薦Ada,而不是C++?

            當(dāng)然不是。我不知道這是誰(shuí)傳出來(lái)的謠言,肯定是一個(gè)Ada信徒,要么是過(guò)分狂熱,要么是不懷好意。

            13. 你愿不愿意將C++與別的語(yǔ)言比較?

            抱歉,我不愿意。你可以在The Design and Evolution of C++的介紹性文字里找到原因。

            有不少書(shū)評(píng)家邀請(qǐng)我把C++與其它的語(yǔ)言相比,我已經(jīng)決定不做此類事情。在此我想重申一個(gè)我很久以來(lái)一直強(qiáng)調(diào)的觀點(diǎn):語(yǔ)言之間的比較沒(méi)什么意義,更不公平。主流語(yǔ)言之間的合理比較要耗費(fèi)很大的精力,多數(shù)人不會(huì)愿意付出這么大的代價(jià)。另外還需要在廣泛的應(yīng)用領(lǐng)域有充分經(jīng)驗(yàn),保持一種不偏不倚、客觀獨(dú)立的立場(chǎng),有著公正無(wú)私的信念。我沒(méi)時(shí)間,而且作為C++的創(chuàng)造者,在公正無(wú)私這一點(diǎn)上我永遠(yuǎn)不會(huì)獲得完全的信任。

            人們?cè)噲D把各種語(yǔ)言拿來(lái)比較長(zhǎng)短,有些現(xiàn)象我已經(jīng)一次又一次地注意到,坦率地說(shuō)我感到擔(dān)憂。作者們盡力表現(xiàn)的公正無(wú)私,但是最終都是無(wú)可救藥地偏向于某一種特定的應(yīng)用程序,某一種特定的編程風(fēng)格,或者某一種特定的程序員文化。更糟的是,當(dāng)某一種語(yǔ)言明顯地比另一種語(yǔ)言更出名時(shí),一些不易察覺(jué)的偷梁換柱就開(kāi)始了:比較有名的語(yǔ)言中的缺陷被有意淡化,而且被拐彎抹角地加以掩飾;而同樣的缺陷在不那么出名的語(yǔ)言里就被描述為致命硬傷。類似的,有關(guān)比較出名的語(yǔ)言的技術(shù)資料經(jīng)常更新,而不太出名的語(yǔ)言的技術(shù)資料往往是幾年以前的,試問(wèn)這種比較有何公正性和意義可言?所以我對(duì)于C++之外的語(yǔ)言的評(píng)論嚴(yán)格限制在一般性的特別特定的范疇里。

            換言之,我認(rèn)為C++是大多數(shù)人開(kāi)發(fā)大部分應(yīng)用程序時(shí)的最佳選擇。

            14. 別人可是經(jīng)常拿他們的語(yǔ)言與C++比來(lái)比去,這讓你感到不自在了嗎?

            當(dāng)這些比較不完整或者出于商業(yè)目的時(shí),我確實(shí)感覺(jué)不爽。那些散布最廣的比較性評(píng)論大多是由某種語(yǔ)言,比方說(shuō)Z語(yǔ)言的擁護(hù)者發(fā)表的,其目的是為了證明Z比其它的語(yǔ)言好。由于C++被廣泛地使用,所以C++通常成了黑名單上的頭一個(gè)名字。通常,這類文章被夾在Z語(yǔ)言的供貨商提供的產(chǎn)品之中,成了其市場(chǎng)競(jìng)爭(zhēng)的一個(gè)手段。令人震驚的是,相當(dāng)多的此類評(píng)論引用那些在開(kāi)發(fā)Z語(yǔ)言的公司中工作的雇員的文章,而這些經(jīng)不起考驗(yàn)文章無(wú)非是想證明Z是最好的。特別是在這些比較中確實(shí)有一些零零散散的事實(shí),(所以更具欺騙性——譯者),畢竟沒(méi)有一種語(yǔ)言在任何情況下都是最好的。C++當(dāng)然不完美,不過(guò)請(qǐng)注意,特意選擇出來(lái)的事實(shí)雖然好像正確,但有時(shí)是完全的誤導(dǎo)。

            以后再看到語(yǔ)言比較方面的文章時(shí),請(qǐng)留心是誰(shuí)寫(xiě)的,他的表述是不是以事實(shí)為依據(jù),以公正為準(zhǔn)繩,特別是評(píng)判的標(biāo)準(zhǔn)是不是對(duì)于所引述的每一種語(yǔ)言來(lái)說(shuō)都公平合理。這可不容易做到。

            15. 在做小項(xiàng)目時(shí),C優(yōu)于C++嗎?

            我認(rèn)為非也。除了由于缺乏好的C++編譯器而導(dǎo)致的問(wèn)題之外,我從沒(méi)有看到哪個(gè)項(xiàng)目用C會(huì)比用C++更合適。

            (不過(guò)現(xiàn)在C++編譯器導(dǎo)致的問(wèn)題還是不可忽略的,當(dāng)你看到同樣功能的C++程序可執(zhí)行代碼體積比C大一倍而且速度慢得多時(shí),會(huì)對(duì)此有所感觸的?!g者)

            以下內(nèi)容來(lái)自Visual C++ Developer’s Journal主編Elden Nelson 2000年3月對(duì)B. S的專訪

            16. 如果您現(xiàn)在有機(jī)會(huì)從頭設(shè)計(jì)C++語(yǔ)言,您會(huì)做些什么不同的事情?

            當(dāng)然,你永遠(yuǎn)都不可能重新設(shè)計(jì)一種語(yǔ)言,那沒(méi)有意義,而且任何一種語(yǔ)言都是它那個(gè)時(shí)代的產(chǎn)物。如果讓我今天再設(shè)計(jì)一種語(yǔ)言,我仍然會(huì)綜合考慮邏輯的優(yōu)美、效率、通用性、實(shí)現(xiàn)的復(fù)雜程度和人們的喜好。要知道人們的習(xí)慣對(duì)于他們的喜好有著巨大的影響。

            現(xiàn)在,我會(huì)尋找一種簡(jiǎn)單得多的語(yǔ)法,我會(huì)把類型系統(tǒng)的沖突問(wèn)題限制在很少的幾種情況里,而且你能很容易的發(fā)現(xiàn)這些問(wèn)題。這樣就能夠很容易的禁止不安全的操作。

            (B. S的原則是:對(duì)于糟糕的代碼,就算是不能完全禁止,至少也要讓它大白于天下,而不是藏在陰暗的角落里暗箭傷人。C++實(shí)際上已經(jīng)提供了這樣的機(jī)制,例如如果你使用象reinterpret_cast<int>(pointer)這樣的很明顯是非常糟糕的表達(dá)式進(jìn)行造型,別人會(huì)很容易地找到問(wèn)題所在。只不過(guò)C++仍然允許你使用傳統(tǒng)的、C風(fēng)格的造型機(jī)制,而又有不少人一直使用這種老式的風(fēng)格,所以才引來(lái)麻煩多多。B. S的意思是說(shuō),要是現(xiàn)在能夠禁止老式的風(fēng)格該有多好!作為語(yǔ)言設(shè)計(jì)者的他,恐怕是沒(méi)有這個(gè)機(jī)會(huì)了,但是作為語(yǔ)言使用者的我們,卻還有很大的希望去改進(jìn)自己的代碼。何去何從,應(yīng)該是我們深思的時(shí)候了?!g者)

            我還會(huì)把核心語(yǔ)言的體積盡可能搞得小一些,包括類和模板的關(guān)鍵的抽象特性,而把很多其它的語(yǔ)言特性放在庫(kù)里來(lái)解決。當(dāng)然我也會(huì)保證核心語(yǔ)言足夠的強(qiáng)大,使得那些庫(kù)本身也足以用這個(gè)核心語(yǔ)言來(lái)產(chǎn)生。我可不希望標(biāo)準(zhǔn)庫(kù)的創(chuàng)建需要用到什么不屬于該語(yǔ)言本身的神秘機(jī)制。另外我會(huì)讓這個(gè)核心語(yǔ)言的定義更加精確。(有不少新的語(yǔ)言在建庫(kù)時(shí)就使用了一些“不屬于該語(yǔ)言本身的神秘機(jī)制”,比如VB和JAVA。從理論上講,這是近乎無(wú)賴的行徑,所以B. S不以為然。不過(guò)從實(shí)用出發(fā)倒也無(wú)傷大雅?!g者)

            最重要的是,我會(huì)在該語(yǔ)言被廣泛使用之前盡可能維持一個(gè)很長(zhǎng)的醞釀期,這樣我可以以其他人的反饋為基礎(chǔ)進(jìn)行改進(jìn)。這可能是最困難的,因?yàn)橐坏┯惺裁礀|西是明顯出色和有前途的,大家就會(huì)蜂擁而至的來(lái)使用它,此后作任何不兼容的修正都會(huì)是非常困難的。

            我相信這些思想與我當(dāng)初設(shè)計(jì)C++時(shí)的理念是非常類似的,同樣也是這些思想指引著一二十年來(lái)C++的不斷演化。當(dāng)然,我認(rèn)為現(xiàn)在還沒(méi)有什么東西能讓我覺(jué)得像是“完美的語(yǔ)言”。

            17. 您預(yù)期C++做哪些增強(qiáng),會(huì)不會(huì)刪掉一些東西?

            很不幸,雖然有一些東西很應(yīng)該扔掉,但恐怕很難真的刪掉任何東西。第一個(gè)應(yīng)該拋棄的東西就是C風(fēng)格的造型機(jī)制和強(qiáng)制類型轉(zhuǎn)換。就算不禁止,編譯器的作者們至少也應(yīng)該對(duì)這種行為給與強(qiáng)烈的警告。我希望能用類似vector的東西徹底取代數(shù)組,但這顯然是不可能的。不過(guò)如果程序員們能主動(dòng)使用vector來(lái)代替數(shù)組,就會(huì)立刻受益匪淺。關(guān)鍵是你不必再使用C++中最復(fù)雜難纏的技巧了,現(xiàn)在有優(yōu)秀得多的替代方案。

            至于主要的特性,我沒(méi)想去掉任何東西。特別是那些把C++與C區(qū)別開(kāi)來(lái)的主要特性恐怕沒(méi)法風(fēng)平浪靜的被拋掉。通常問(wèn)這些問(wèn)題的人是希望我挑出諸如多繼承、異常、模板等機(jī)制來(lái)接受批判。所以在這我想大聲講清楚,我認(rèn)為多繼承機(jī)制對(duì)于靜態(tài)類型語(yǔ)言實(shí)現(xiàn)繼承性來(lái)說(shuō)是必需的,異常機(jī)制是在大系統(tǒng)中對(duì)付錯(cuò)誤的正確方法,模板機(jī)制是進(jìn)行類型安全的、精致的和高效的程序設(shè)計(jì)的靈丹妙藥。我們可以在小的細(xì)節(jié)上對(duì)于這些機(jī)制挑挑刺,但在大的方面,這些基本的概念都必須堅(jiān)持。

            現(xiàn)在我們?nèi)栽趯W(xué)習(xí)標(biāo)準(zhǔn)C++,也正在標(biāo)準(zhǔn)所提供的特性基礎(chǔ)上發(fā)展出更新的、更有趣的編程技術(shù)。特別是人們剛剛開(kāi)始使用STL和異常機(jī)制,還有很多高效強(qiáng)大的技術(shù)鮮為人知,所以大可不必急匆匆的跑去增加什么新的機(jī)制。

            我認(rèn)為當(dāng)前的重點(diǎn)是提供很多新的、比以前更加精致的、更有用的庫(kù),這方面潛力巨大。例如,如果有一個(gè)能被廣泛使用的、更精致的支持并發(fā)程序設(shè)計(jì)的庫(kù),那將是一大福音——C風(fēng)格的線程庫(kù)(例如Pthread——譯者)實(shí)在不夠好。我們也就可以與各種其他的系統(tǒng),例如SQL以及不同的組件模型更好地契合起來(lái)。數(shù)值計(jì)算領(lǐng)域的人們?cè)谶@方面好象已經(jīng)走在了前面,類似像Blitz++、POOMA、MTL之類的高效而精致的庫(kù)的開(kāi)發(fā)已經(jīng)取得了非凡的成就。(譯者在 Internet上造訪了Blitz++和POOMA的主頁(yè),前者是一個(gè)高性能數(shù)學(xué)庫(kù),據(jù)稱其性能與Fortran 77不相上下,同時(shí)又支持大量的C++特性。我想凡是對(duì)于數(shù)值計(jì)算領(lǐng)域有所了解的人都知道這有多么偉大的意義。POOMA則是一個(gè)專門(mén)研究C++并行數(shù)學(xué)算法的項(xiàng)目,它的前景更加不可限量。譯者非常認(rèn)同B. S的這個(gè)觀念。——譯者)
            有了足夠的經(jīng)驗(yàn)之后,我們就能更好的決定應(yīng)該對(duì)標(biāo)準(zhǔn)做些什么調(diào)整。

            18. 顯然,這幾年世界變了,正在走向一個(gè)以Web為中心、分布式計(jì)算為主流的時(shí)代。那么您覺(jué)得C++還能維持其地位嗎?程序員們可不可能把若干種專用語(yǔ)言(比如Perl、Javascript)綜合運(yùn)用以徹底取代某一種通用語(yǔ)言?(C++就是這樣的通用語(yǔ)言——譯者)為了配合新的計(jì)算模式,C++及其標(biāo)準(zhǔn)庫(kù)應(yīng)該做怎樣的調(diào)整?

            從來(lái)沒(méi)有哪一種語(yǔ)言能適合所有的工作,我恐怕以后也不會(huì)有。實(shí)際系統(tǒng)通常是用多種語(yǔ)言和工具構(gòu)造起來(lái)的。C++只是想成為若干語(yǔ)言和工具中的一個(gè),當(dāng)某些專用語(yǔ)言在其領(lǐng)域里特別突出時(shí),它們可以與C++互為補(bǔ)充。也就是說(shuō),我覺(jué)得如果大多數(shù)現(xiàn)在的專用語(yǔ)言能借助特定領(lǐng)域的C++庫(kù)共同工作的話,它們會(huì)表現(xiàn)得更出色。腳本語(yǔ)言通常導(dǎo)致難以維護(hù)的代碼,而且也沒(méi)有給程序的結(jié)構(gòu)、可擴(kuò)展性和可維護(hù)性的優(yōu)化留下什么余地。

            我不敢肯定未來(lái)的代碼是否真的會(huì)是以Web為中心的。就算是直接處理Web的系統(tǒng)也主要是由處理本地資源,如IP連接之類的程序模塊構(gòu)成的。

            地理上的分布性以及服務(wù)器軟件對(duì)于并發(fā)機(jī)制的高度依賴對(duì)于系統(tǒng)的建造者來(lái)說(shuō)的確是個(gè)挑戰(zhàn)。有些針對(duì)上述問(wèn)題的庫(kù)已經(jīng)出現(xiàn),也許我們將會(huì)看到它們最終得以標(biāo)準(zhǔn)化。當(dāng)然,一些原操作和保證規(guī)則應(yīng)該被加到核心語(yǔ)言中以提供對(duì)這些庫(kù)的更佳支持。

            總的來(lái)說(shuō),對(duì)于Web和網(wǎng)絡(luò),我們非常需要一個(gè)真正的系統(tǒng)/網(wǎng)絡(luò)級(jí)的安全模型。指望JavaScript之類的腳本語(yǔ)言實(shí)現(xiàn)這個(gè)模型無(wú)異于白日做夢(mèng)。注意,我也沒(méi)說(shuō)C++提供了這個(gè)問(wèn)題的解決方式。C++的重心是高效的訪問(wèn)系統(tǒng)資源,而不是反欺詐。

            19. 您看C++未來(lái)的走向如何?在接下來(lái)的10年里它會(huì)衰落嗎?或者是基本保持現(xiàn)在的形式?或者發(fā)展變化呈不同的形式?

            C++有著最美好的未來(lái)。用它你能寫(xiě)出偉大的代碼。除了故意進(jìn)行惡意欺詐,C++仍將是開(kāi)發(fā)高性能、高復(fù)雜度系統(tǒng)的最好語(yǔ)言。據(jù)我所知,沒(méi)有那種語(yǔ)言能在通用性、效率和精致三方面的統(tǒng)一上可與C++相題并論。

            我沒(méi)看到C++有衰落的征兆。在我能預(yù)見(jiàn)的未來(lái)里,它的用途還會(huì)不斷增長(zhǎng)。當(dāng)然,在未來(lái)的十年里我們會(huì)看到一些變化,但不會(huì)像你想得那么顯著。跟每一種語(yǔ)言一樣,C++也會(huì)發(fā)展變化。“語(yǔ)言專家們”要求改進(jìn)的喧囂聲震耳欲聾,但是系統(tǒng)開(kāi)發(fā)者們的基本請(qǐng)求是保持穩(wěn)定。

            C+ +會(huì)改進(jìn),但是這些改進(jìn)將主要是為了反映從實(shí)踐中得來(lái)的經(jīng)驗(yàn)教訓(xùn),而不會(huì)是為了追風(fēng)尚趕時(shí)髦。為了更高效地使用一些新的編程技術(shù),比如通用編程技術(shù),可能會(huì)增加一些小的特性。會(huì)有大量的庫(kù)涌現(xiàn),我預(yù)期會(huì)出現(xiàn)一種嶄新的、更出色的庫(kù)支持機(jī)制。我希望新的擴(kuò)展主要集中在支持抽象方面的一般特性,而不是為支持某些特殊任務(wù)的特定機(jī)制。

            例如,“屬性”這個(gè)概念是很有用的,但我不認(rèn)為在一種通用編程語(yǔ)言中有它的容身之地。用標(biāo)準(zhǔn)C++的一組類可以很容易地支持這一概念。如果我們感覺(jué)那族類對(duì)于“屬性”這一概念的支持不盡如人意,也不會(huì)立刻跑去在語(yǔ)言里增加屬性機(jī)制,而是仔細(xì)考慮如何改進(jìn)類和模板以幫助庫(kù)設(shè)計(jì)人員盡可能接近“屬性”這個(gè)概念。也許通過(guò)改進(jìn)函數(shù)對(duì)象的機(jī)制能夠給這個(gè)問(wèn)題一個(gè)滿意的答復(fù)。

            為了使C++在接下來(lái)的十幾年中保持靈活可變,很基本的一點(diǎn)就是不要讓標(biāo)準(zhǔn)C++趕什么學(xué)術(shù)或者商業(yè)的時(shí)髦。人們要求增加的特性中很大一部分通過(guò)使用現(xiàn)有的標(biāo)準(zhǔn)C++開(kāi)發(fā)新庫(kù)的方式都可以實(shí)現(xiàn)。還有,事實(shí)上人們渴望得到的很多特性已經(jīng)被包括在標(biāo)準(zhǔn)C++中,并且被最新的編譯器支持。對(duì)許多程序員來(lái)說(shuō),提高代碼質(zhì)量的最佳途徑不是追求什么語(yǔ)言擴(kuò)展,而是好好地、慢慢地品味最新的C++技術(shù)書(shū)籍。

            20. 您怎么看待腳本語(yǔ)言的興旺態(tài)勢(shì)?特別是Python,似乎提供了一種學(xué)習(xí)OO技術(shù)的更簡(jiǎn)單的途徑。

            有些語(yǔ)言很不錯(cuò)。比如Python,我很喜歡。但是我認(rèn)為你從不同的語(yǔ)言中學(xué)到的OO技術(shù)是不完全相同的。當(dāng)然,每一個(gè)專業(yè)的程序員都需要通曉幾門(mén)語(yǔ)言,并且了解各種語(yǔ)言在編程和設(shè)計(jì)技術(shù)上的不同。

            在我看來(lái),用腳本語(yǔ)言建造的系統(tǒng)與用C++那樣的通用語(yǔ)言建造的系統(tǒng)大不相同。從兩類語(yǔ)言中學(xué)到的技術(shù)區(qū)別明顯。在OO技術(shù)里也不存在什么通用部分對(duì)于各種系統(tǒng)的高效建造來(lái)說(shuō)都是至關(guān)重要的。

            21. 有沒(méi)有計(jì)劃往標(biāo)準(zhǔn)C++里增加一些新的特性以支持分布式計(jì)算?

            沒(méi)有,我也不認(rèn)為有這個(gè)必要。用更好的庫(kù)就差不多能解決問(wèn)題了。最多,為了支持這類的庫(kù),我們可能會(huì)增加一些低級(jí)的原操作和規(guī)則。

            22. 未來(lái)C++有沒(méi)有可能定一個(gè)可移植的二進(jìn)制接口?

            如果你說(shuō)的“可移植”是指跨硬件和塊操作系統(tǒng)的可移植,我想回答是不會(huì)。我們當(dāng)然可以設(shè)計(jì)一個(gè)解釋器或者虛擬機(jī)(如同Java的做法——譯者),但這樣一來(lái),由于無(wú)法以最優(yōu)的方式訪問(wèn)系統(tǒng)資源,C++的能力就會(huì)受到削弱,我真正希望在不遠(yuǎn)的將來(lái)能夠看見(jiàn)的東西是platform ABIs。例如,有人正在努力為Intel新的IA64體系定義C++ ABI,我想這些努力會(huì)得到用戶們的巨大支持。

            能夠把不同編譯器產(chǎn)生的代碼編譯在一起將會(huì)是一項(xiàng)十分有意義的事情。

            23. 在不少流行領(lǐng)域,C++正在漸漸失去光芒,因?yàn)樗笕藗兓ê艽蟮木θ?duì)付一些很基本的工作,比如管理內(nèi)存(因?yàn)闆](méi)有垃圾收集機(jī)制),管理模塊之間的依賴性(因?yàn)闆](méi)有包機(jī)制),管理組件的版本。C++缺乏一些現(xiàn)代語(yǔ)言已經(jīng)視為標(biāo)準(zhǔn)的特性。比如傳言中最酷的Java語(yǔ)言就特別重視這些問(wèn)題。那么在解決這些問(wèn)題是否會(huì)導(dǎo)致C++的發(fā)展背離其根本宗旨呢?C++應(yīng)該怎樣發(fā)展以保證我們?cè)谶@種語(yǔ)言上的投資能有合理的回報(bào),而不是被迫去重新使用另一種語(yǔ)言?

            我倒還沒(méi)有注意到C++比以前用的少了。相反,我看到的指標(biāo)表明C+的使用還在穩(wěn)定地增長(zhǎng)著。只不過(guò)這種基數(shù)很大的穩(wěn)定增長(zhǎng)以及在標(biāo)準(zhǔn)性、移植性和庫(kù)方面的不斷提高并沒(méi)有造成什么具有欺騙性的新聞效應(yīng)而已。我認(rèn)為你所說(shuō)的“失去光芒”只不過(guò)是市場(chǎng)推銷(xiāo)和新聞意義上的現(xiàn)象。

            如果你需要垃圾收集機(jī)制的話,你可以在C++應(yīng)用程序中插入一個(gè)垃圾收集器。有不少自由的和商業(yè)的垃圾收集器已經(jīng)在重要的實(shí)踐中被證明是很出色的。

            如果你不想使用垃圾收集機(jī)制,也沒(méi)關(guān)系。你可以使用標(biāo)準(zhǔn)容器類,它們大大減少了對(duì)于顯式分配和回收內(nèi)存的需要。這樣,使用現(xiàn)代的庫(kù)和現(xiàn)代的編程風(fēng)格,你能夠避免大部分的內(nèi)存管理問(wèn)題。

            同樣的技術(shù)還能夠用來(lái)避免一般資源的管理問(wèn)題。并不是只有內(nèi)存才會(huì)泄漏,線程句柄、文件、互斥鎖、網(wǎng)絡(luò)連接等都是重要的資源,為了建立可靠的系統(tǒng),這些資源必須被正確的管理。如果你覺(jué)得有了垃圾收集機(jī)制就可以解決所有的資源管理問(wèn)題,那么你最好趕快從美夢(mèng)中醒來(lái)。

            C++提供了很多機(jī)制來(lái)管理一般性的資源。關(guān)鍵的手段——“獲取資源就是初始化”——可以使用函數(shù)對(duì)象來(lái)管理生存期問(wèn)題。語(yǔ)言中關(guān)于對(duì)象的局部構(gòu)造和異常機(jī)制對(duì)這項(xiàng)技術(shù)提供了支持。

            某些語(yǔ)言的狂熱支持者總是用諷刺漫畫(huà)的筆法描述C++,然而C++實(shí)際上要好得多。特別是我覺(jué)得很多其他的特性已經(jīng)泛濫不堪了,在C++中,通常這些特性能夠很容易的被模擬出來(lái)。相反的,新的語(yǔ)言在推廣的過(guò)程中總是不斷地增加新的特性,這就是為什么從一種語(yǔ)言誕生到被廣泛使用,其體積通常會(huì)增加個(gè)兩三倍。

            目前,做為個(gè)人和組織,對(duì)于C++的最好投資就是去更好地理解標(biāo)準(zhǔn)C++和現(xiàn)代的C++設(shè)計(jì)編程技術(shù)。大多數(shù)人使用C++的方式實(shí)際上停留80年代中期的水平,甚至比那更陳舊。

            至于模塊依賴性問(wèn)題,我的觀點(diǎn)是,在編程語(yǔ)言的工作和系統(tǒng)的工作之間應(yīng)該有一個(gè)明顯的界線,依賴關(guān)系應(yīng)該盡可能地與編程語(yǔ)言分開(kāi),而由系統(tǒng)來(lái)支持。

            我不認(rèn)為組建版本的問(wèn)題應(yīng)該由編程語(yǔ)言來(lái)解決,這是一個(gè)系統(tǒng)范疇里的問(wèn)題,在語(yǔ)言里應(yīng)該通過(guò)提供相應(yīng)的庫(kù)來(lái)解決。C++有這樣的機(jī)制。解決這樣的問(wèn)題不會(huì)使 C++偏離軌道。但是給C++增加很多特殊的特性就會(huì)使C++偏離軌道,而且在保持可移植性和平臺(tái)獨(dú)立性方面也會(huì)是一個(gè)倒退。

            24. 標(biāo)準(zhǔn)C++推出有段時(shí)間了,Java也大踏步地往前走而且取得了顯著的進(jìn)步,您現(xiàn)在怎么比較Java與C++?您覺(jué)得Java想要變成像C++一樣“好” 的語(yǔ)言還需要做些什么?您舉的C++從Java身上學(xué)到了什么經(jīng)驗(yàn)嗎?有沒(méi)有什么Java的特性您認(rèn)為是可以被C++吸納的?
            我不比較語(yǔ)言。做好這項(xiàng)工作是十分困難的,而且很少具有專業(yè)水準(zhǔn)。

            我認(rèn)為C++的進(jìn)步會(huì)是主要以它的用戶在使用中遇到的問(wèn)題以及其自身邏輯為基礎(chǔ)。當(dāng)然,其他語(yǔ)言中的某些思想也會(huì)被考慮,但不能被簡(jiǎn)單的移花接木過(guò)來(lái)。你必須審視那些機(jī)制在技術(shù)上和思想上的背景,并且找到在C++中支持這些技術(shù)的最佳方案。

            有時(shí)最好的選擇是綜合使用幾種語(yǔ)言。畢竟沒(méi)有任何一種語(yǔ)言是放之四海而皆優(yōu)的。C++現(xiàn)在是,將來(lái)也繼續(xù)會(huì)是在廣泛應(yīng)用領(lǐng)域中最好的語(yǔ)言之一。但是,我們不能被拉下水,不能把所有可能的特性都加到C++里面來(lái)向大眾獻(xiàn)媚。我認(rèn)為Java和C++現(xiàn)在和將來(lái)都會(huì)是十分不同的語(yǔ)言,語(yǔ)法相似,但背后的對(duì)象模型明顯不同。

            對(duì)于我來(lái)說(shuō),一個(gè)很重要的區(qū)別是C++有一個(gè)ISO標(biāo)準(zhǔn),而Java則是一個(gè)專有語(yǔ)言。

            25. 在Java剛剛出現(xiàn)的那幾年,有很多欺騙性的言論說(shuō)它將會(huì)是終極語(yǔ)言,會(huì)取代C++。您覺(jué)得在過(guò)去兩三年里Java對(duì)C++的追隨者們有什么影響?

            到現(xiàn)在關(guān)于Java的不實(shí)之辭也還隨處可見(jiàn)。暫且不提Java在過(guò)去5年間的創(chuàng)紀(jì)錄的發(fā)展,狂熱的大眾似乎認(rèn)為Java將最終取代的不僅僅是C++,而且還有所有其他的編程語(yǔ)言。但在另一方面,C++的使用仍在繼續(xù)增長(zhǎng)。我不認(rèn)為Java對(duì)于C++的影響已經(jīng)使得人們轉(zhuǎn)而把本來(lái)打算用來(lái)創(chuàng)造更好的C++工具庫(kù)的資源調(diào)過(guò)去開(kāi)發(fā)Java工具庫(kù)。Java對(duì)于學(xué)習(xí)編程的人來(lái)說(shuō)沒(méi)有太多的新東西,所以對(duì)于C++的定義也沒(méi)什么影響。在那個(gè)領(lǐng)域,Java還得努力追趕。例如,我認(rèn)為為Sun遲早會(huì)往Java里加入類似模板的機(jī)制。

            人們應(yīng)該認(rèn)識(shí)到C++和Java的目標(biāo)是何等的不同。 以C++的設(shè)計(jì)理念來(lái)衡量Java,或是以Java的設(shè)計(jì)理念來(lái)衡量C++,得出的結(jié)論都不會(huì)很好。

            在訪談即將結(jié)束時(shí),或許我該再次表明態(tài)度:C++仍然是我喜愛(ài)的語(yǔ)言,在寫(xiě)代碼時(shí)你會(huì)發(fā)現(xiàn)沒(méi)有那種語(yǔ)言能像它那樣在如此廣泛的應(yīng)用領(lǐng)域和平臺(tái)上同時(shí)達(dá)成如此的高效與精致。


            posted on 2007-09-11 14:45 lovedday 閱讀(477) 評(píng)論(0)  編輯 收藏 引用 所屬分類: ▲ C++ Program

            公告

            導(dǎo)航

            統(tǒng)計(jì)

            常用鏈接

            隨筆分類(178)

            3D游戲編程相關(guān)鏈接

            搜索

            最新評(píng)論

            日本精品久久久中文字幕 | 国产精品一久久香蕉产线看| 国产精品久久久久久久人人看 | 久久久久国产精品熟女影院 | 欧美一区二区精品久久| 国产99久久九九精品无码| 久久久久国产精品三级网| 久久天天躁狠狠躁夜夜96流白浆| 777米奇久久最新地址| 欧美亚洲另类久久综合| 久久人人爽人人爽人人片av麻烦 | 777米奇久久最新地址| 亚洲欧美精品一区久久中文字幕| 久久综合久久自在自线精品自| 久久久国产精品福利免费| 五月丁香综合激情六月久久| 久久久久久久综合日本亚洲| 精品综合久久久久久97| 久久久亚洲精品蜜桃臀| 97精品国产91久久久久久| 久久精品国产久精国产一老狼| 91久久精品视频| 色综合久久无码五十路人妻| 国产香蕉久久精品综合网| 久久久久噜噜噜亚洲熟女综合 | 久久国产精品久久| 香蕉久久夜色精品升级完成 | 999久久久免费精品国产| 狠狠综合久久综合88亚洲| 久久久久国产亚洲AV麻豆| 国产成人精品久久综合| 97久久精品人人做人人爽| 久久99国产精品99久久| 精品午夜久久福利大片| 欧美一区二区三区久久综| 久久人妻少妇嫩草AV无码专区| 奇米影视7777久久精品人人爽| 久久天天躁狠狠躁夜夜不卡| 思思久久99热只有频精品66| 亚洲综合伊人久久综合| 中文国产成人精品久久不卡|