C++程序與C語(yǔ)言誰(shuí)更強(qiáng)大?
有人說(shuō)C++程序是個(gè)強(qiáng)大的語(yǔ)言,可以用于做別的語(yǔ)言做不了的工作,但是有人也說(shuō)C++語(yǔ)言發(fā)展到現(xiàn)在,還是以C語(yǔ)言作為模板進(jìn)化升級(jí)而成,C++程序在性能方面最大的威脅可能來(lái)自硬件帶來(lái)的問(wèn)題。
在計(jì)算機(jī)行業(yè),50年已經(jīng)是一個(gè)幾乎不可思議的時(shí)間了;雖然到今年為止,晶體管已有60年的歷史。所以,在我問(wèn)“C++的未來(lái)在哪里?”這個(gè)問(wèn)題的時(shí)候,實(shí)際上是想問(wèn)在接下來(lái)的10年,20年或者30年,C++會(huì)有什么變化?
在文章中,Stephan引經(jīng)據(jù)典,提到了Bjarne Stroustrup發(fā)布的一篇關(guān)于C++程序的論文,和Alexander Stepanov關(guān)于C++底層機(jī)器模型的訪談。然后他指出,盡管C++作為一門語(yǔ)言一直關(guān)注性能的問(wèn)題。
但根據(jù)Herb Sutter在2005年發(fā)表的一篇關(guān)于并發(fā)的趨勢(shì)以及語(yǔ)言必須演進(jìn)以迎接這些挑戰(zhàn)的論文,由于工藝的限制,底層硬件的發(fā)展現(xiàn)在處于一個(gè)不穩(wěn)定的狀態(tài)。Stephan說(shuō):在C++改變最大的核心語(yǔ)言屬性列表中,應(yīng)該包括可變參數(shù)模板(Variadic Template)、概念和左值引用(rvalue reference)等。
前兩個(gè)會(huì)使得寫模板更加有趣,這當(dāng)然很好,因?yàn)槟0迨巧a(chǎn)高效代碼的一個(gè)很有力的方法。另外第三個(gè)主要面向C++03中最為薄弱的領(lǐng)域之一——復(fù)制數(shù)值的趨勢(shì)。一個(gè)叫Jared的評(píng)論者也同意Stephan的觀點(diǎn),但對(duì).NET能否像C++那么長(zhǎng)盛不衰,沒(méi)有太大的信心:
說(shuō)得好,但是我相信C++會(huì)一直興盛到2057年。實(shí)際上我認(rèn)為C++會(huì)比.NET撐得更久。(我認(rèn)為.NET最終會(huì)因?yàn)槭袌?chǎng)驅(qū)動(dòng)而成為一個(gè)技術(shù)實(shí)體,但不好說(shuō))Jim Grow不同意關(guān)于托管C++沒(méi)有像其他.NET語(yǔ)言引起別人注意的論點(diǎn):看上去C++程序將會(huì)被打入冷宮,只有幾個(gè)頑固不化的分子堅(jiān)守陣地。
大部分人都已轉(zhuǎn)投.NET編碼陣營(yíng)。因?yàn)?FONT size=+0>C++和現(xiàn)代的工具集那么地不合拍,公司和開(kāi)發(fā)人員在無(wú)路可走的時(shí)候才會(huì)選擇它。真的好慘,C++本來(lái)可以使.NET平臺(tái)上的一個(gè)非常優(yōu)秀的語(yǔ)言。可悲地是,有些人卻別有動(dòng)機(jī),說(shuō).NET開(kāi)發(fā)人員都在使用其他的語(yǔ)言。
Olivier Giroux擔(dān)憂的是C++內(nèi)存模型在未來(lái)的表現(xiàn):在單個(gè)芯片里同時(shí)運(yùn)行100多個(gè)線程的性能,和只運(yùn)行2到8個(gè)的情況是非常不同的,盡管你知道將來(lái)的趨勢(shì)是可以做到的。因?yàn)橛凶銐蚨嗟木€程同時(shí)運(yùn)行,指令就非常充足,你可以將已有的指令全都塞滿。很快,阿姆達(dá)爾定律(譯者注:該定律指出在體系結(jié)構(gòu)的優(yōu)化設(shè)計(jì)過(guò)程中。
應(yīng)該挑選對(duì)整體有重大影響的部件來(lái)進(jìn)行優(yōu)化,以得到更好的結(jié)果。)就把你牢牢拴在內(nèi)存接口處。在過(guò)去,我們用緩存設(shè)計(jì)解決這樣的問(wèn)題,但那要比一個(gè)超線程負(fù)載需要更多的分部一致性。#t#
所以,C++在性能方面最大的威脅可能來(lái)自硬件,因?yàn)橥ㄟ^(guò)C++程序現(xiàn)在提供的內(nèi)存模型還不容易對(duì)其進(jìn)行相應(yīng)的編程工作。那么InfoQ中文站的讀者對(duì)于C++作為一門語(yǔ)言的前景是如何理解的呢?它是會(huì)繼續(xù)昂首上前,還是即將輝煌不再?
C++是個(gè)強(qiáng)大的語(yǔ)言,可以用于做別的語(yǔ)言做不了的工作。但是,這種強(qiáng)大功能是有代價(jià)的。開(kāi)始使用C++時(shí),你可能會(huì)遇到內(nèi)存溢出和訪問(wèn)失效等問(wèn)題,使程序死機(jī)。這里用最簡(jiǎn)短的篇幅介紹C++程序基礎(chǔ)。
C++語(yǔ)言本身有專著介紹,這種書(shū)還特別厚,所以別指望我能用三言兩語(yǔ)說(shuō)清楚。讀者學(xué)完本書(shū)并使用C++ Builder一般時(shí)間之后,最后對(duì)C++語(yǔ)言再作更深入的了解。 C++可以最充分地利用面向?qū)ο缶幊?OOP)的優(yōu)勢(shì)。
OOP不只是一個(gè)新名詞,而有它的實(shí)際意義,可以生成可復(fù)用的對(duì)象。新術(shù)語(yǔ) 對(duì)象(object),和前面介紹的構(gòu)件一樣,是完成特定編程任務(wù)的軟件塊(構(gòu)件是對(duì)象,但對(duì)象不全是構(gòu)件,稍后會(huì)解釋這點(diǎn))。
對(duì)象只向用戶(使用對(duì)象的編程人員)顯示必須的部分,從而簡(jiǎn)化對(duì)象的使用。用戶不必知道的所有內(nèi)部機(jī)制都隱藏在幕后。這一切都包括在面向?qū)ο缶幊痰母拍钪小OP可以用模塊化方法進(jìn)行編程,從而避免每次從頭開(kāi)始。C++ Builder程序是面向OOP的,因?yàn)?FONT size=+0>C++ Builder大量使用構(gòu)件。
生成構(gòu)件后(你生成的或C++ Builder內(nèi)置的構(gòu)件),就可以在任何C++ Builder程序中重復(fù)使用。構(gòu)件還可以擴(kuò)展,通過(guò)繼承生成具有新功能的新構(gòu)件。最妙的是,構(gòu)件隱藏了所有內(nèi)容細(xì)節(jié),使編程人員能集中精力充分利用構(gòu)件。
【編輯推薦】