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