C++的未來之路:C++0x概覽

字號(hào):


    C++0x的工作已經(jīng)進(jìn)入了一個(gè)決定性的階段。ISO C++委員會(huì)對(duì)C++0x的目標(biāo)是使其成為“C++09”。這意味著我們要在2008年完成這個(gè)標(biāo)準(zhǔn)以便被ISO成員國(guó)批準(zhǔn)。最后提交的標(biāo)準(zhǔn)設(shè)施將選自目前正被討論的那些提案。為了按時(shí)完成此項(xiàng)工作,委員會(huì)已經(jīng)停止審查新的提案并將精力集中于目前已經(jīng)被討論的那些提案上。
    本文簡(jiǎn)要描述了C++0x標(biāo)準(zhǔn)化工作的指導(dǎo)原則,展示了一些可能的語言擴(kuò)展的例子,并列出了一些被提議的新標(biāo)準(zhǔn)庫(kù)設(shè)施。
    指導(dǎo)原則
    C++是一門偏向于系統(tǒng)編程的通用編程語言。它
    ·是一個(gè)更好的C
    ·支持?jǐn)?shù)據(jù)抽象
    ·支持面向?qū)ο缶幊?BR>    ·支持泛型編程
    當(dāng)我說“系統(tǒng)編程”時(shí),我是指?jìng)鹘y(tǒng)上與操作系統(tǒng)以及基礎(chǔ)工具有關(guān)的那一類編程任務(wù)。包括操作系統(tǒng)核心、設(shè)備驅(qū)動(dòng)程序、系統(tǒng)工具、網(wǎng)絡(luò)應(yīng)用、字處理工具、編譯器、某些圖形和GUI應(yīng)用、數(shù)據(jù)庫(kù)系統(tǒng)、游戲引擎、CAD/CAM、電信系統(tǒng),等等。這類工作在當(dāng)前的C++用戶中占有主導(dǎo)地位。例子參見我的個(gè)人主頁(yè)“Applications”單元(http://www.research.att.com/~bs/applications.html)。
    C++0x的目標(biāo)是使以上的說法仍然成立。它并不是要消除這些編程風(fēng)格(styles)(或“paradigms”,范型)之一(比方說,使C++不那么兼容于C),或者添加一種全新的“范型”。的編程風(fēng)格是聯(lián)合使用這些技術(shù),這也就是我們常說的“多范型編程(multi-paradigm programming)”。因此,我們可以說我們希望改進(jìn)C++使其成為一門更好的多范型編程語言。
    C++0x的高級(jí)目標(biāo)是:
    使C++成為一門更好的系統(tǒng)編程語言和構(gòu)建庫(kù)的語言。
    - 而不是為特定子社群提供專用設(shè)施(例如數(shù)值計(jì)算或Windows風(fēng)格的應(yīng)用程序開發(fā))。
    使C++更易于教和學(xué)。
    - 通過增強(qiáng)的一致性、更強(qiáng)的保證以及針對(duì)新手的設(shè)施支持。
    換句話說,在C++98已經(jīng)很強(qiáng)的領(lǐng)域(以及一些更多的、C++98支持的較為自然的、一般化的領(lǐng)域),C++0x應(yīng)該比C++98做得更好。對(duì)于一些專有的應(yīng)用程序領(lǐng)域來說,例如數(shù)值計(jì)算、Windows風(fēng)格的應(yīng)用程序開發(fā)、嵌入式系統(tǒng)編程,C++0x應(yīng)該依賴于程序庫(kù)。C++在基本語言特性(如基于棧的對(duì)象和指針)方面所具有的效率,和在抽象機(jī)制 (如類和模板) 方面所具有的通用性和靈活性,使得程序庫(kù)在非常廣泛的應(yīng)用領(lǐng)域都能保持它的吸引力,也因此降低了C++對(duì)各種新的語言特性的需求。
    我們不能為了降低C++在教與學(xué)方面的難度,而去移除某些語言特性。保持C++穩(wěn)定性與兼容性是我們主要的考慮。因此,不管是以什么方式來移除其中任何重要的特性都是行不通的(而移除其中不重要的特性對(duì)于解決問題又沒有實(shí)質(zhì)性的幫助)。那么留給我們的選擇恐怕只有“將規(guī)則一般化”和“添加更易于使用的特性”。兩者都是我們的目標(biāo),但是后者更容易一些。例如,更好的程序庫(kù)(容器與算法)可以幫助用戶避免一些底層設(shè)施(例如數(shù)組與指針)帶來的問題。那些能夠“簡(jiǎn)化程序庫(kù)的定義和應(yīng)用”的語言設(shè)施(例如“concepts”與“通用初始化器列表”,下面將會(huì)談到它們)也將有助于改善C++0x的易用性。
    一些人可能對(duì)此持有反對(duì)意見,“不要為了新手而將C++降格,適合新手的語言已經(jīng)有很多了!”,或者“的辦法還是將新手變成專家!”這些人的觀點(diǎn)并非毫無道理,但是現(xiàn)實(shí)是新手總比專家要多。而且許多C++用戶完全不必、也沒有意愿成為C++專家——他們是各自領(lǐng)域的專家(比如物理學(xué)家、圖形學(xué)專家、硬件工程師),只不過他們需要使用C++。在我個(gè)人來看,C++已經(jīng)太過“專家友好”了,我們完全可以在花費(fèi)很少的情況下為“新手們”提供更好的支持。事實(shí)上,這種支持不會(huì)損及任何C++代碼的性能(零成本原則依舊適用)、靈活性(我們不打算禁止任何東西)、與簡(jiǎn)潔度。相反,我們的目標(biāo)是簡(jiǎn)化這些理念的表達(dá)。最后,值得指出的是,C++是如此之大,而且應(yīng)用如此廣泛,各種設(shè)計(jì)技巧可謂汗牛充棟,以至于我們很多時(shí)候也都是“新手”。
    C++0x的改進(jìn)應(yīng)該以這樣的方式進(jìn)行:結(jié)果所得語言應(yīng)該更易于學(xué)和用。以下是委員會(huì)考慮的一些規(guī)則:
    ·提供穩(wěn)定性和兼容性(針對(duì)C++98而言,可能的話還有C)
    ·優(yōu)先考慮庫(kù)設(shè)施,其次才是語言擴(kuò)展
    ·只進(jìn)行可以改變?nèi)藗兯伎挤绞降男薷?BR>    ·優(yōu)先考慮一般性而非專用性
    ·同時(shí)為專家和新手提供支持
    ·增強(qiáng)類型安全性(通過為當(dāng)前不安全的設(shè)施提供安全的替代品)
    ·改進(jìn)直接處理硬件的性能和能力
    ·適應(yīng)現(xiàn)實(shí)世界