C++0x:嶄新的C++,還是另一個(gè)Java?
從全球最活躍的C++社區(qū)boost傳來消息,新的C++標(biāo)準(zhǔn):C++0x,最早將在2007年10月發(fā)布……
最近,從全球最活躍的C++社區(qū)boost傳來消息,新的C++標(biāo)準(zhǔn):C++0x,最早將在2007年10月發(fā)布。很早就有人猜測,C++0x中的x到底是8還是9,不過現(xiàn)在看來很可能是7,但是也不盡然,因?yàn)樯弦粋€(gè)C++標(biāo)準(zhǔn)本來計(jì)劃是1997年發(fā)布,但是因?yàn)镾TL的引入而推遲到1998年。這次又遇到了相同的情況,大家都不懷疑TR1和TR2(Technical Report)將成為新標(biāo)準(zhǔn)的一部分,但是隨著越來越多的boost庫被移到TR2中,TR2的進(jìn)一個(gè)完善很可能拖新標(biāo)準(zhǔn)的后腿。不過,C++0x是C++的一次重大升級,恐怕編譯器廠商最快也只能在2009年推出符合新標(biāo)準(zhǔn)的編譯器。
新的C++標(biāo)準(zhǔn)將在幾個(gè)方面對C++標(biāo)準(zhǔn)進(jìn)行擴(kuò)充:
1. 增強(qiáng)STL庫,標(biāo)準(zhǔn)庫TR1和TR2中的新組建,比如“正則表達(dá)式;
2. 并發(fā)內(nèi)存模型和并發(fā)庫(面向多核處理器);
3. 垃圾收集器;
4. 可簡化的泛型程序的開發(fā);
從上一個(gè)標(biāo)準(zhǔn)C++98發(fā)布到現(xiàn)在,將近有10年的時(shí)間了,在這十年的時(shí)間里編程語言發(fā)生了翻天覆地的變化,首先是JAVA異軍突起,然后是微軟借助.NET平臺的優(yōu)勢推出了C#,C++已經(jīng)不再是編程語言中的明星了,它被擠下了神壇,慢慢淪為邊緣編程語言。這中間的主要原因并不是C++的語法落伍了,而是使用C++開發(fā)軟件效率低下并且容易出錯(cuò)。效率低下的原因是因?yàn)镃++缺少庫的支持,C++只提供了編程語言的基本功能,缺少強(qiáng)有力的庫支持,比如字符串處理就一直是C++的詬病。容易出錯(cuò)的原因是C++從C繼承了動態(tài)內(nèi)存分配和指針,這一點(diǎn)被認(rèn)為是軟件發(fā)生錯(cuò)誤的根源,雖然C++引入STL來解決這個(gè)問題,比如用vector代替內(nèi)置數(shù)組可以防止內(nèi)存泄漏,用迭代器代替直接下標(biāo)操作可以防止地址越界。但是STL畢竟太簡單了,比如字符串處理就只有一個(gè)簡單的string,比起Perl差遠(yuǎn)了。C++唯一的優(yōu)勢就是速度,但是隨著處理器和內(nèi)存的快速發(fā)展也慢慢被遺忘了,所以就淪落到了現(xiàn)在的地步。
C++要想擺脫這種局面,就必須解決這兩個(gè)問題,而在新標(biāo)準(zhǔn)中我們已經(jīng)看到了答案。TR1和TR2已經(jīng)成為新的標(biāo)準(zhǔn)庫的一部分,它們不僅提供了象“正則表達(dá)式和“哈希表這樣程序員盼望已久的功能,還有針對多核處理器的并發(fā)內(nèi)存模型和并發(fā)庫,對網(wǎng)絡(luò)也有socket庫等等。針對內(nèi)存出錯(cuò)問題,新標(biāo)準(zhǔn)通過強(qiáng)化STL代替內(nèi)存訪問,使用垃圾收集器防止內(nèi)存泄漏。在C++社區(qū)上關(guān)于新標(biāo)準(zhǔn)討論最多的就是到底應(yīng)不應(yīng)該修改C++語言,爭論的核心之一就是垃圾收集器。老鳥們總是認(rèn)為“不要為了新手而將C++降格,適合新手的語言已經(jīng)有很多了!,很多C++程序員認(rèn)為新標(biāo)準(zhǔn)應(yīng)該將精力集中于擴(kuò)充標(biāo)準(zhǔn)庫,而不是解決內(nèi)存泄漏問題,因?yàn)槟鞘浅绦騿T自己的事。在本人看來這種思想將會害死C++,因?yàn)楝F(xiàn)實(shí)中總是新手比老鳥多,軟件公司的老板招一個(gè)程序員是希望他(她,它)能夠立即開始編寫沒有錯(cuò)誤的代碼,而不是培養(yǎng)他們知道他們成為專家后再開始干活,所以,如果C++不能成為一種“菜鳥友好的語言,那么C++的墮落將不可避免。設(shè)想某個(gè)程序員分配了一塊內(nèi)存而忘記釋放它,但是垃圾收集器捕獲了這個(gè)異常并默默地替他釋放了這塊內(nèi)存,從而使內(nèi)存泄漏這種悲慘的事情得以避免,而程序運(yùn)行起來狀態(tài)良好,那還有什么理由不在C++中添加垃圾收集功能呢?
C++0x能夠重振C++的雄風(fēng)嗎?有了垃圾收集器的C++,并且所有內(nèi)存和指針操作都被“友好地建議用STL代替,那還是C++嗎?還是另一個(gè)JAVA?答案當(dāng)然是“這仍舊是C++,請放心使用,不過C++0x之后還會有什么新的內(nèi)容,會不會有一套GUI庫?如果是那樣的話就真的成JAVA了。
相關(guān)文章:
