<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    冒號(hào)課堂§6.1:系統(tǒng)語(yǔ)言

    冒號(hào)課堂

    第六課 語(yǔ)言簡(jiǎn)評(píng)(1)


    課前導(dǎo)讀

    本課對(duì)一些主流語(yǔ)言進(jìn)行了簡(jiǎn)單的比較和評(píng)價(jià)。一家之言,權(quán)作助興。

    本課共分四節(jié)——

    1. 系統(tǒng)語(yǔ)言——權(quán)力的雙刃劍
    2. 平臺(tái)語(yǔ)言——先搭臺(tái)后唱戲
    3. 前臺(tái)語(yǔ)言——視覺(jué)與交互的藝術(shù)
    4. 后臺(tái)腳本——敏捷開(kāi)發(fā)的利器

    6.1系統(tǒng)語(yǔ)言——權(quán)力的雙刃劍

    居高者形逸而神勞,處下者形勞而神逸                        —《洪應(yīng)明·菜根譚》

     

    關(guān)鍵詞:C族語(yǔ)言,C語(yǔ)言,C++,D語(yǔ)言

    摘要:簡(jiǎn)談CC++D

     

      預(yù)覽

     

    ·          通禪悟道者拈花不語(yǔ),坐井觀天者蛙鳴鼓噪

    ·          Java程序員大多被慣壞了,環(huán)保意識(shí)要淡薄得多

    ·          (指針)用得好可以是削鐵如泥的神兵利器,用得不好則可能是自我毀滅的罪惡淵藪

    ·          OOP又不是金子,含量越高越好。試圖把一切都裝進(jìn)OOP的箱子里的想法無(wú)異于削足適履

    ·          它們(系統(tǒng)語(yǔ)言)的理念是:優(yōu)化機(jī)器的時(shí)間而不是人的時(shí)間,優(yōu)化機(jī)器的記憶而不是人的記憶;假設(shè)編譯器是愚蠢的而程序員是聰明的,因此賦予程序員更多的權(quán)利、義務(wù)與責(zé)任

    ·          C++是匹無(wú)轡無(wú)鞍的野馬,看似桀驁不馴,若能順性而御,必能足踏飛燕,行千里而不勞


      提問(wèn) 


    • 為什么C++不支持自動(dòng)垃圾回收?
    • C++中如何解決內(nèi)存釋放問(wèn)題?
    • 系統(tǒng)語(yǔ)言有哪些特點(diǎn)?
    • 在不引入OOP的前提下,C語(yǔ)言可以借鑒C++的哪些特征?
    • D語(yǔ)言比C++有哪些改進(jìn)?
    • 在電腦性能日益提升的今天,還有必要在乎程序的性能和效率嗎?


        講解

     

    教室里,學(xué)員們正熱火朝天地討論著流行的編程語(yǔ)言。冒號(hào)推門而入,仿佛沸水鍋里被澆了一瓢冷水,立刻平靜下來(lái)。

    冒號(hào)笑吟吟地看著大家:“怎么不討論了?”

    眾人齊道:“該您了!”

    “首先需要聲明的是,本課評(píng)論編程語(yǔ)言,乃是應(yīng)眾位之邀,實(shí)非本意。”冒號(hào)變得嚴(yán)肅起來(lái),“因?yàn)檫@種評(píng)論,不可避免地會(huì)帶上個(gè)人色彩,容易產(chǎn)生誤導(dǎo)。有道是,通禪悟道者拈花不語(yǔ),坐井觀天者蛙鳴鼓噪。

    眾人迅速自動(dòng)對(duì)號(hào):看來(lái)我們就是一群蛤蟆。

    “這樣一來(lái),我的處境就很尷尬了。”冒號(hào)自嘲著。

    有人在幸災(zāi)樂(lè)禍地偷笑。

    “也罷,即使作蛙鳴,至少也要先跳出井來(lái)。”冒號(hào)毅然決然地加入了蛤蟆的行列,“要談,就旗幟鮮明地談,該贊嘆的就贊嘆,該鄙視的就鄙視。說(shuō)些你好我好大家好之類不痛不癢的話,倒不如不說(shuō)。”

    嘆號(hào)一拍大腿:“好,這樣才夠痛快!”

    問(wèn)號(hào)忍不住問(wèn):“您究竟打算比較哪些主流語(yǔ)言呢?”

    冒號(hào)回答:“就談?wù)劦谝惶谜n提到的最流行的十二種語(yǔ)言吧。按語(yǔ)法特征可將它們分為三類:C族靜態(tài)語(yǔ)言五種——CC++JavaC#D;非C族靜態(tài)語(yǔ)言兩種——VBDelphi;動(dòng)態(tài)語(yǔ)言五種——PerlPHPPythonRuby JavaScript 。”

    嘆號(hào)表示懷疑:“這么多種語(yǔ)言怎么比較得過(guò)來(lái)?”

    冒號(hào)解釋:“我們主要比較第一類的C族語(yǔ)言,這些也是今后學(xué)習(xí)的重點(diǎn),其他的只是泛泛而談。”

    引號(hào)猜測(cè):“因?yàn)樗麄兏匾?#8221;

    “可以這么說(shuō)。”冒號(hào)直截了當(dāng),“毋庸諱言,在當(dāng)今的主流語(yǔ)言中,C族語(yǔ)言應(yīng)用范圍之廣、使用人數(shù)之多、影響力之巨都是其他類語(yǔ)言所無(wú)法比擬的。它們之間的關(guān)系從名字上就能看出:C語(yǔ)言的前身是B語(yǔ)言;其后是C++Java曾被稱為C++++--,意思是在C++上增點(diǎn)東西再減點(diǎn)東西;C##就是四個(gè)疊起的加號(hào)[1];最后D語(yǔ)言干脆在字母上進(jìn)行升級(jí)。”

    句號(hào)推斷:“B語(yǔ)言、C語(yǔ)言、D語(yǔ)言,下一個(gè)該D++D#E語(yǔ)言了。”

    誰(shuí)知冒號(hào)卻說(shuō):“E語(yǔ)言已經(jīng)有了,與Java的語(yǔ)法很像。甚至F語(yǔ)言也有了,但不是C族語(yǔ)言,而是Fortran族的。這不,微軟還在.Net平臺(tái)上推出了F#語(yǔ)言,不過(guò)這里的F指的是‘Functional’,即函數(shù)式。”

    逗號(hào)向往著:“不如直接搞個(gè)終極的Z語(yǔ)言,成為全世界程序員的唯一指定語(yǔ)言,多省事!”

    “這難度不亞于全人類共用一種語(yǔ)言。”冒號(hào)笑道,“愿望是美好的,我們還得面對(duì)現(xiàn)實(shí)。不扯遠(yuǎn)了,你們先談?wù)勔幌逻@些C族語(yǔ)言各自的特點(diǎn)吧。”

    眾人心想:老冒怎么跟國(guó)足一個(gè)毛病,老喜歡回傳,就是不直接射門,真是急煞人也!

    問(wèn)號(hào)揀了個(gè)軟柿子:“C語(yǔ)言是C族老大,又是唯一的純過(guò)程式語(yǔ)言,當(dāng)然與眾不同啦。”

    引號(hào)一板一眼:“C++在過(guò)程式的基礎(chǔ)上又引入對(duì)象式和泛型式,同時(shí)保持了C的高效性和底層開(kāi)發(fā)能力。”

    逗號(hào)接道:“Java既繼承了C++的優(yōu)點(diǎn),又克服了C++的復(fù)雜性,雖然底層開(kāi)發(fā)能力有所減弱,但具備平臺(tái)無(wú)關(guān)性。”

    句號(hào)不緊不慢:“C#兼具C++Java各自的優(yōu)點(diǎn),但效率上不如C++,跨平臺(tái)方面不如Java。”

    嘆號(hào)后悔嘴慢:“剩下一個(gè)最陌生的D語(yǔ)言,在第一堂課之前還真沒(méi)聽(tīng)說(shuō)過(guò),怎么擠上主流語(yǔ)言位置的?我想。。。呃,它總該比C++要高級(jí)吧。”

    冒號(hào)評(píng)價(jià):“各位談得雖然簡(jiǎn)單了些,也算八九不離十吧。下面我稍微展開(kāi)些來(lái)講。”

    此時(shí)眾人有一個(gè)共同的愿望,希望老冒這次能痛快地單刀赴會(huì)、直搗黃龍。

    冒號(hào)似乎看出大家的心思,開(kāi)始口若懸河:“關(guān)于C語(yǔ)言,前面多次提到。這是一把歷久彌新的寶劍,一旦出鞘,依舊寒光逼人,鋒利無(wú)儔。有了它,便如戰(zhàn)將有了佩劍,平添一分獨(dú)闖敵營(yíng)的膽氣。盡管以現(xiàn)代的眼光來(lái)看,它存在不少缺點(diǎn),但即使拋開(kāi)C語(yǔ)言輝煌的歷史不談,單就其以如此高齡在諸多后輩沖擊之下仍屹立不倒而論,讓人無(wú)法對(duì)其多加苛求。”

    逗號(hào)提出異議:“但語(yǔ)言不是讓人崇拜的,而是讓人運(yùn)用的。一門語(yǔ)言無(wú)論過(guò)去如何榮光,如果不適應(yīng)現(xiàn)代發(fā)展趨勢(shì),還是可能被淘汰。”

    “說(shuō)得非常好!”冒號(hào)竟然鼓起掌來(lái),“迄今為止本課堂對(duì)于具體知識(shí)的講授不算太多,但一直提倡獨(dú)立思考,不要盲從權(quán)威。如果你們能做到這一點(diǎn),本班的目標(biāo)也就實(shí)現(xiàn)了一半。回頭再說(shuō)說(shuō)C語(yǔ)言,它源自Unix操作系統(tǒng)的開(kāi)發(fā),以其良好的抽象性和可移植性取代了匯編語(yǔ)言作為系統(tǒng)開(kāi)發(fā)語(yǔ)言。因其簡(jiǎn)潔實(shí)用、靈活高效,很快從系統(tǒng)領(lǐng)域發(fā)展到其他領(lǐng)域而成為通用語(yǔ)言。隨著新興語(yǔ)言的崛起以及硬件性能的大幅提高,C語(yǔ)言的缺點(diǎn)也日益顯著:過(guò)于寬松的類型檢查、容易出錯(cuò)的內(nèi)存管理、相對(duì)貧乏的語(yǔ)言特征等等。雖然自身還在發(fā)展,它的市場(chǎng)份額日益減少乃是不爭(zhēng)的事實(shí)。但在相當(dāng)長(zhǎng)的時(shí)間內(nèi),它在其所擅長(zhǎng)的領(lǐng)域里仍會(huì)占舉足輕重的一席之地。如果C能借鑒C++ 命名空間、重載、異常處理和STL等非OOP的特征,它的生命力絕不會(huì)比任何OOP語(yǔ)言弱。附帶說(shuō)一句,C雖然沒(méi)有直接支持OOP的語(yǔ)法,但經(jīng)過(guò)適當(dāng)?shù)脑O(shè)計(jì)還是能實(shí)現(xiàn)OOP[2]。”

    引號(hào)咨詢道:“關(guān)于C語(yǔ)言的學(xué)習(xí),您有何建議?”

    “精讀K&R的《The C Programming Language》,此書不過(guò)二百頁(yè),堪稱C語(yǔ)言的劍訣。其中的RDennis Ritchie,是C的創(chuàng)造者,同時(shí)也是Unix的締造者之一,是真正的大師。如今的大師,同博士、教授、院士等頭銜一樣,嚴(yán)重地通貨膨脹了。”冒號(hào)不無(wú)感慨。

    問(wèn)號(hào)尖銳地問(wèn):“C++既保持了C的底層開(kāi)發(fā)能力,又引入了OOPC的處境想必更加艱難吧?”

    冒號(hào)坦承:“這是不假。C++成功的一個(gè)重要因素是對(duì)C語(yǔ)言的兼容,由此吸引了大批的C程序員。但這不是沒(méi)有代價(jià)的,C++在兼容C的同時(shí)也保留了C的許多缺陷。Java成功的地方有很多,一個(gè)不容忽視的因素是它徹底擺脫了與C兼容的桎梏。由于C++對(duì)C的改革不徹底,又過(guò)于龐雜,并且效率上不如C,這使得C仍有其生存空間。略有諷刺意味的是,對(duì)C++批判最激烈的往往來(lái)自C的社區(qū),比如Linux之父Linus Torvalds就曾激烈地批判過(guò)C++。”

    Linus?那可是我的偶像呢!”嘆號(hào)驚訝道。

    冒號(hào)勸誡:“如果你因?yàn)槭撬姆劢z而后悔學(xué)C++,那就是為他人的偏執(zhí)買單,不管那人名氣有多大。”

    句號(hào)指出:“C++最為人詬病的地方有:語(yǔ)法過(guò)于復(fù)雜,學(xué)習(xí)曲線陡、開(kāi)發(fā)效率低;支持的范式過(guò)多;OOP不徹底;自省(reflection)功能不足;支持指針操作導(dǎo)致安全隱患;沒(méi)有自動(dòng)垃圾回收,容易內(nèi)存泄漏;沒(méi)有線程支持;沒(méi)有豐富的標(biāo)準(zhǔn)庫(kù)支持圖形界面、網(wǎng)絡(luò)編程等。”

    “罪狀不少哇!這些說(shuō)法都有一定道理,但有些也有失公允。且聽(tīng)我一一道來(lái)。”冒號(hào)當(dāng)起了辯護(hù)律師,“C++比較復(fù)雜這點(diǎn)沒(méi)錯(cuò),Stroustrup說(shuō)過(guò)一句耐人尋味的話: 一種語(yǔ)言不夠復(fù)雜是因?yàn)樗€不夠成熟。成人肯定比兒童復(fù)雜,因?yàn)樗袚?dān)更大的責(zé)任。大家不妨看看Java1.0到即將的7.0C#1.0到即將的4.0的發(fā)展過(guò)程,是否應(yīng)證了這一點(diǎn)?當(dāng)然C++的復(fù)雜度的確高于其他語(yǔ)言,但如果不執(zhí)著于奇技淫巧,它絕非高不可攀。C++的開(kāi)發(fā)效率相比JavaC#,差距主要在兩個(gè)方面:一是標(biāo)準(zhǔn)庫(kù)不夠完善,二是需要手工回收垃圾。關(guān)于前者,的確是C++的一大軟肋,標(biāo)準(zhǔn)庫(kù)竟然連企業(yè)應(yīng)用中最常用的圖形界面、網(wǎng)絡(luò)編程、數(shù)據(jù)庫(kù)處理、多線程等都不能涵蓋,嚴(yán)重障礙了生產(chǎn)力。其實(shí)C++也有苦衷,不像JavaC#那樣有大公司的鼎力支持,只靠效率極為低下的標(biāo)準(zhǔn)委員會(huì)來(lái)維護(hù)。98年的一個(gè)標(biāo)準(zhǔn)直到03年還在修訂,下一個(gè)標(biāo)準(zhǔn)至少要到09年。連Stroustrup都在哭窮,聲稱沒(méi)有足夠的人力和時(shí)間來(lái)開(kāi)發(fā)標(biāo)準(zhǔn)庫(kù),可為何廣受贊譽(yù)的Boost庫(kù)至今仍徘徊在標(biāo)準(zhǔn)門外?考慮到Boost的創(chuàng)辦人大多出自標(biāo)準(zhǔn)委員會(huì),其他無(wú)此背景的類庫(kù)恐怕更難登C++之大堂了。相比之下D語(yǔ)言更慘,雖然天生麗質(zhì),苦無(wú)豪門青睞,只好一直待字閨中。”

    嘆號(hào)感慨:“金錢才是技術(shù)的最大推動(dòng)力啊!”

    “話糙理不糙。”冒號(hào)也很無(wú)奈,“再來(lái)談?wù)動(dòng)嘘P(guān)自動(dòng)垃圾回收的問(wèn)題。在C++中,程序員也不是非得手工清理垃圾不可的。更好的辦法是遵循RAII的慣用法(idiom[3],通過(guò)智能指針smart pointer)來(lái)解決內(nèi)存釋放問(wèn)題。”

    逗號(hào)聽(tīng)不明白:“什么是RAII?”

    RAIIResource Acquisition Is Initialization的縮寫,直譯為‘資源獲取即初始化’。”冒號(hào)解釋,“其實(shí)更準(zhǔn)確的叫法應(yīng)該是RRIFResource Release Is Finalization),即‘資源釋放即終結(jié)化’[4]。其思想是:將資源的取放與某一對(duì)象的生命周期綁定,初始化對(duì)象時(shí)獲取資源,終結(jié)化對(duì)象時(shí)釋放資源。用戶代碼不再直接管理資源,只需控制相應(yīng)的對(duì)象即可。這樣代碼得以簡(jiǎn)化,資源的有效性也得以保障,并且還是異常安全的exception-safe[5]。”

    問(wèn)號(hào)猜想:“在Java中沒(méi)有這種用法,是因?yàn)樗呀?jīng)有了垃圾回收器嗎?”

    冒號(hào)搖搖頭:“問(wèn)題的關(guān)鍵不在這里。資源不只限于內(nèi)存,還包括文件、線程鎖、數(shù)據(jù)庫(kù)連接等等,這些都不是垃圾回收器所能解決的。看看Java的數(shù)據(jù)庫(kù)應(yīng)用代碼吧,對(duì)于那些頻繁出現(xiàn)的被try/catch/finally包裹的resultset.close()statement.close()connection.close(),你是習(xí)以為常呢,還是不勝其煩?”

    逗號(hào)眼睛一亮:“如果采用RAII的技巧,這些都可以省去了嗎?”

    冒號(hào)再次搖頭:“可惜Java不像C++D那樣,能在stack)上創(chuàng)建對(duì)象。棧對(duì)象有一個(gè)的特點(diǎn),一旦超出其作用范圍,便自動(dòng)釋放內(nèi)存。在此之前會(huì)調(diào)用析構(gòu)函數(shù)destructor),后者繼而調(diào)用釋放資源的代碼。”

    幾聲嘆息清晰可聞。

    冒號(hào)續(xù)道:“另一方面,盡管自動(dòng)垃圾回收機(jī)制逐漸為大眾所接受——據(jù)說(shuō)C++0x也將部分地支持它——但這種機(jī)制也存在缺陷。比如一個(gè)Java程序如果在某一時(shí)段極耗內(nèi)存,由于自動(dòng)垃圾回收的不定時(shí)性,不能保證及時(shí)清理內(nèi)存,可能會(huì)拋出OutOfMemoryError的錯(cuò)誤。對(duì)于內(nèi)存有限的系統(tǒng)或?qū)崟r(shí)系統(tǒng)來(lái)說(shuō),這絕對(duì)是一個(gè)致命的軟肋。C++不支持自動(dòng)垃圾回收,正是基于這些方面的考慮。Stroustrup非常顧慮自動(dòng)垃圾回收帶來(lái)的時(shí)間和空間上的過(guò)多開(kāi)銷,并且擔(dān)心它會(huì)影響C++完成其所肩負(fù)的底層任務(wù)。另外,千萬(wàn)不要以為有了自動(dòng)垃圾回收機(jī)制就一勞永逸、萬(wàn)事大吉了。Java程序一樣會(huì)有內(nèi)存泄漏,其幾率甚至可能比C++的更大,因?yàn)?/span>C++程序員對(duì)此更有戒心,而Java程序員大多被慣壞了,環(huán)保意識(shí)要淡薄得多。”

    問(wèn)號(hào)直奔要害:“您如何看待CC++中的指針?”

    冒號(hào)欣然接招:“指針是CC++最大的特色,其他語(yǔ)言要么不支持,要么支持得有限。CC++可以說(shuō)是成也指針,敗也指針。用得好可以是削鐵如泥的神兵利器,用得不好則可能是自我毀滅的罪惡淵藪。但由于二者定位于系統(tǒng)語(yǔ)言,而指針對(duì)于底層操作是必不可少的。同樣道理,二者的數(shù)據(jù)類型的轉(zhuǎn)換比其他靜態(tài)類型語(yǔ)言更自由,也是源出于此。”

    句號(hào)總結(jié):“能力越大,責(zé)任越大,風(fēng)險(xiǎn)越大。

    “正是此意!”冒號(hào)重重地敲了一下桌子,“此話既適用于編程語(yǔ)言,也適用于程序員。至于C++缺少對(duì)自省功能的支持,也是因?yàn)樽非笮剩辉冈谠獢?shù)據(jù)上花時(shí)間和空間。說(shuō)到C++支持的范式過(guò)多,程序員過(guò)于自由,代碼不標(biāo)準(zhǔn)難維護(hù),這就如同埋怨餐館提供的菜式過(guò)多以致難以擺出一桌酒席一樣可笑。最后,指責(zé)C++不是100OOP的說(shuō)法更是荒謬之極。OOP又不是金子,含量越高越好。試圖把一切都裝進(jìn)OOP的箱子里的想法無(wú)異于削足適履。典型的如Java中的Math類,邏輯上壓根兒就不存在什么Math對(duì)象,清一色的static方法和常量就是最好的諷刺。在C++中只要在mathnamespace中定義一些自由函數(shù)就可以了,自然而簡(jiǎn)潔。作為一個(gè)佐證,JavaJ2SE5.0引進(jìn)了靜態(tài)導(dǎo)入(static import)機(jī)制[6],不僅在形式上簡(jiǎn)化了調(diào)用代碼,也在思維上容忍了非OOP的過(guò)程式。”

    引號(hào)發(fā)覺(jué):“您好像把對(duì)C++所有的責(zé)難都化解了。”

    “可恨之人必有可憐之處嘛。”冒號(hào)俗語(yǔ)反用,“其實(shí)C++仍有不少亟待改進(jìn)之處,D語(yǔ)言就是很好的啟示。D語(yǔ)言的提供了可控制的垃圾回收器;支持線程同步;支持動(dòng)態(tài)數(shù)組dynamic array);支持嵌套函數(shù)nested function);支持契約式設(shè)計(jì)design by contract);廢除了CC++ 中令人頭痛的頭文件header file)等等。這些都是C++程序員夢(mèng)寐以求的特征。”

    逗號(hào)很奇怪:“為什么D語(yǔ)言名氣這么小?”

    句號(hào)吟道:“千里馬常有,而伯樂(lè)不常有,大腕伯樂(lè)更稀有。”

    眾樂(lè)。

    冒號(hào)拔高了調(diào)門:“既然系統(tǒng)語(yǔ)言主要為底層系統(tǒng)的開(kāi)發(fā)服務(wù),這就決定了它們的理念是:優(yōu)化機(jī)器的時(shí)間而不是人的時(shí)間優(yōu)化機(jī)器的記憶而不是人的記憶;假設(shè)編譯器是愚蠢的而程序員是聰明的,因此賦予程序員更多的權(quán)利、義務(wù)與責(zé)任無(wú)視這種背景和理念而去與其他語(yǔ)言相較,完全是不著筋節(jié),不值一哂。當(dāng)然這并不排斥系統(tǒng)語(yǔ)言用于應(yīng)用開(kāi)發(fā),尤其是C++D語(yǔ)言。需要強(qiáng)調(diào)的是,常見(jiàn)的‘C/C++’的說(shuō)法很不科學(xué)。CC++雖有千絲萬(wàn)縷的聯(lián)系,但一個(gè)簡(jiǎn)單,一個(gè)復(fù)雜;一個(gè)純過(guò)程式,一個(gè)集過(guò)程式、對(duì)象式、泛型式和元編程于一體。貌合神離,不宜混為一談。”

    嘆號(hào)一個(gè)問(wèn)題憋了半天,不吐不快:“我有一個(gè)問(wèn)題:如今電腦性能這么高,CC++如此強(qiáng)調(diào)程序的性能和效率還有必要嗎?”

    “絕對(duì)有必要!”冒號(hào)斬釘截鐵,“其一、縱向看,用戶的耐心與電腦的性能成反比,早年一個(gè)386人們就滿足了,如今卻忍受不了586;以前16M內(nèi)存就不錯(cuò)了,現(xiàn)在1G都嫌小。其二、橫向比,占用資源過(guò)多、運(yùn)行相對(duì)緩慢的軟件競(jìng)爭(zhēng)力也低。其三、在一些應(yīng)用領(lǐng)域如人工智能、大型計(jì)算等方面,普通電腦的性能還遠(yuǎn)遠(yuǎn)不能滿足要求,超級(jí)計(jì)算機(jī)的存在就是明證。其四、仍有些程序跑在資源有限的主機(jī)上,比如嵌入式系統(tǒng)。”

    引號(hào)再次要求:“能推薦一些C++方面的書嗎?”

    冒號(hào)直言相告:“學(xué)好C一本書足矣,學(xué)好C++即使推薦十本仍有遺珠之憾。可以說(shuō)C++是苦了編程者,甜了著書人。開(kāi)個(gè)小書單:初級(jí)——《C++ Primer》和《Thinking in C++》;中級(jí)——《The C++ Programming Language》和《Effective C++》系列;高級(jí)——《The C++ In-Depth》系列。這里還要特別推薦一下《The Design and Evolution of C++》,從中你可以看到 C++的設(shè)計(jì)和演變的來(lái)龍去脈,極具啟發(fā)性。其他的C++精品書籍還有不少,恕不一一列舉了。C++是匹無(wú)轡無(wú)鞍的野馬,看似桀驁不馴,若能順性而御,必能足踏飛燕,行千里而不勞。”


       插語(yǔ)

    [1] 更官方的說(shuō)法是“#”來(lái)自音樂(lè)中的高半音符號(hào)。

    [2] 比如文獻(xiàn)【4】設(shè)計(jì)了一種用C來(lái)實(shí)現(xiàn)OOP的機(jī)制。

    [3] RAII是由Bjarne Stroustrup首先提出的,參見(jiàn)文獻(xiàn)【2】。

    [4] 說(shuō)它更準(zhǔn)確,是因?yàn)橘Y源獲取的代碼不一定需要出現(xiàn)在constructor中,但資源釋放的代碼一定出現(xiàn)在destructor中。

    [5] 指即使發(fā)生異常(exception)也不會(huì)導(dǎo)致資源泄露。

    [6] 比如,在靜態(tài)導(dǎo)入Math類(import static java.lang.Math.*;)后,代碼中可以直接調(diào)用sqrtlogmax等數(shù)學(xué)方法,不再需要“Math.”的前綴了。


       總結(jié)

    ·        C++對(duì)C語(yǔ)言的兼容是其成功的一個(gè)重要因素,但同時(shí)也繼承了C的一些缺陷。

    ·        C++設(shè)計(jì)者沒(méi)有直接支持自動(dòng)垃圾回收,是擔(dān)心它造成過(guò)大的時(shí)空開(kāi)銷,同時(shí)會(huì)削弱底層開(kāi)發(fā)能力。

    ·        除了手工釋放內(nèi)存外,C++提倡運(yùn)用RAII原則解決包括內(nèi)存在內(nèi)的資源管理問(wèn)題。

    ·        CC++對(duì)指針的全面支持和寬松的類型轉(zhuǎn)換限制,均出于底層系統(tǒng)開(kāi)發(fā)的需要。

    ·        C可以借鑒C++命名空間、重載、異常處理和STL等非OOP的特征。

    ·        D語(yǔ)言提供了可控制的垃圾回收器,支持線程同步、動(dòng)態(tài)數(shù)組、嵌套函數(shù)和契約式設(shè)計(jì),并廢除了頭文件和前置聲明(forward declaration)。

    ·        在程序性能與生產(chǎn)效率之間,系統(tǒng)語(yǔ)言更看重前者,它們?cè)谫x予程序員更多的權(quán)利的同時(shí),也帶給程序員更多的負(fù)擔(dān)。

    ·        程序的性能和效率永遠(yuǎn)是重要的。一方面,用戶對(duì)軟件性能的期望越來(lái)越高;另一方面,有時(shí)硬件性能與軟件需求并不匹配:有些應(yīng)用(如人工智能、大型計(jì)算)對(duì)程序的性能和效率要求極高,有些系統(tǒng)(如嵌入式系統(tǒng))的資源十分有限。


     “”參考

    [1] Bjarne StroustrupThe Design and Evolution of C++Reading, MAAddison-Wesley1994219-222

    [2] Bjarne StroustrupThe C++ Programming LanguageSpecial ed.Reading, MAAddison-Wesley2000364-387

    [3] Walter BrightD Programming Languagehttp://www.digitalmars.com/d/

    [4] Axel Tobias SchreinerObject-oriented Programming with ANSI-Chttp://www.planetpdf.com/codecuts/pdfs/ooc.pdf

    posted on 2009-02-08 22:03 鄭暉 閱讀(3668) 評(píng)論(1)  編輯  收藏 所屬分類: 冒號(hào)課堂

    評(píng)論

    # re: 冒號(hào)課堂§6.1:系統(tǒng)語(yǔ)言[未登錄](méi) 2009-02-12 23:39 frank

    雖然說(shuō)的比較詳細(xì),但整體立場(chǎng)上是在給C++涂脂抹粉。每一種語(yǔ)言都有自己的應(yīng)用領(lǐng)域和方面,離開(kāi)具體應(yīng)用說(shuō)任何一種語(yǔ)言好或者不好都是不客觀不現(xiàn)實(shí)的。c++再?gòu)?qiáng)大,也不適合開(kāi)發(fā)分布式企業(yè)應(yīng)用。java再?gòu)?qiáng)大,對(duì)底層設(shè)備訪問(wèn)也只能束手。  回復(fù)  更多評(píng)論   

    導(dǎo)航

    統(tǒng)計(jì)

    公告

    博客搬家:http://blog.zhenghui.org
    《冒號(hào)課堂》一書于2009年10月上市,詳情請(qǐng)見(jiàn)
    冒號(hào)課堂

    留言簿(17)

    隨筆分類(61)

    隨筆檔案(61)

    文章分類(1)

    文章檔案(1)

    最新隨筆

    積分與排名

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 亚洲精品在线视频| 亚洲妇熟XXXX妇色黄| 久久亚洲AV无码精品色午夜麻| 亚洲伊人久久大香线蕉在观| 草久免费在线观看网站| 精品国产污污免费网站aⅴ| 少妇亚洲免费精品| 亚洲国产午夜精品理论片| 色多多www视频在线观看免费| 永久免费视频网站在线观看| 亚洲A丁香五香天堂网| 亚洲成av人片在线看片| 亚洲精品黄色视频在线观看免费资源 | 最近免费字幕中文大全视频| 男女啪啪永久免费观看网站| 亚洲AV无码一区二区乱孑伦AS| 亚洲日韩国产AV无码无码精品| 永久免费A∨片在线观看| 日韩视频在线免费| 99人中文字幕亚洲区| 一级毛片免费毛片毛片| 最近中文字幕免费mv视频8| 亚洲成A人片在线观看无码不卡| 亚洲av永久无码精品网址| 免费A级毛片av无码| 国产乱子伦精品免费女| 亚洲国产成人精品青青草原| 中文字幕在线成人免费看| 国产禁女女网站免费看| 亚洲人成人77777在线播放 | eeuss影院ss奇兵免费com| 成年女人毛片免费播放人| 综合自拍亚洲综合图不卡区| 亚洲日韩在线观看免费视频| 四虎www成人影院免费观看| 亚洲视频一区在线观看| 十八禁在线观看视频播放免费| 四虎国产精品免费久久影院| 亚洲首页国产精品丝袜| 91av视频免费在线观看| 亚洲精品一品区二品区三品区|