C++0x:嶄新的C++,還是另一個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,但是也不盡然,因為上一個C++標(biāo)準(zhǔn)本來計劃是1997年發(fā)布,但是因為STL的引入而推遲到1998年。這次又遇到了相同的情況,大家都不懷疑TR1和TR2(Technical Report)將成為新標(biāo)準(zhǔn)的一部分,但是隨著越來越多的boost庫被移到TR2中,TR2的進(jìn)一個完善很可能拖新標(biāo)準(zhǔn)的后腿。不過,C++0x是C++的一次重大升級,恐怕編譯器廠商最快也只能在2009年推出符合新標(biāo)準(zhǔn)的編譯器。
新的C++標(biāo)準(zhǔn)將在幾個方面對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ā);
從上一個標(biāo)準(zhǔn)C++98發(fā)布到現(xiàn)在,將近有10年的時間了,在這十年的時間里編程語言發(fā)生了翻天覆地的變化,首先是JAVA異軍突起,然后是微軟借助.NET平臺的優(yōu)勢推出了C#,C++已經(jīng)不再是編程語言中的明星了,它被擠下了神壇,慢慢淪為邊緣編程語言。這中間的主要原因并不是C++的語法落伍了,而是使用C++開發(fā)軟件效率低下并且容易出錯。效率低下的原因是因為C++缺少庫的支持,C++只提供了編程語言的基本功能,缺少強(qiáng)有力的庫支持,比如字符串處理就一直是C++的詬病。容易出錯的原因是C++從C繼承了動態(tài)內(nèi)存分配和指針,這一點被認(rèn)為是軟件發(fā)生錯誤的根源,雖然C++引入STL來解決這個問題,比如用vector代替內(nèi)置數(shù)組可以防止內(nèi)存泄漏,用迭代器代替直接下標(biāo)操作可以防止地址越界。但是STL畢竟太簡單了,比如字符串處理就只有一個簡單的string,比起Perl差遠(yuǎn)了。C++唯一的優(yōu)勢就是速度,但是隨著處理器和內(nèi)存的快速發(fā)展也慢慢被遺忘了,所以就淪落到了現(xiàn)在的地步。
C++要想擺脫這種局面,就必須解決這兩個問題,而在新標(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)存出錯問題,新標(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)存泄漏問題,因為那是程序員自己的事。在本人看來這種思想將會害死C++,因為現(xiàn)實中總是新手比老鳥多,軟件公司的老板招一個程序員是希望他(她,它)能夠立即開始編寫沒有錯誤的代碼,而不是培養(yǎng)他們知道他們成為專家后再開始干活,所以,如果C++不能成為一種“菜鳥友好的語言,那么C++的墮落將不可避免。設(shè)想某個程序員分配了一塊內(nèi)存而忘記釋放它,但是垃圾收集器捕獲了這個異常并默默地替他釋放了這塊內(nèi)存,從而使內(nèi)存泄漏這種悲慘的事情得以避免,而程序運行起來狀態(tài)良好,那還有什么理由不在C++中添加垃圾收集功能呢?
C++0x能夠重振C++的雄風(fēng)嗎?有了垃圾收集器的C++,并且所有內(nèi)存和指針操作都被“友好地建議用STL代替,那還是C++嗎?還是另一個JAVA?答案當(dāng)然是“這仍舊是C++,請放心使用,不過C++0x之后還會有什么新的內(nèi)容,會不會有一套GUI庫?如果是那樣的話就真的成JAVA了。
相關(guān)文章:
1. Python 實現(xiàn)勞拉游戲的實例代碼(四連環(huán)、重力四子棋)2. .Net加密神器Eazfuscator.NET?2023.2?最新版使用教程3. Java GZip 基于內(nèi)存實現(xiàn)壓縮和解壓的方法4. java獲取文件編碼,jsoup獲取html純文本操作5. 利用CSS制作3D動畫6. 一款功能強(qiáng)大的markdown編輯器tui.editor使用示例詳解7. 淺談Android Studio導(dǎo)出javadoc文檔操作及問題的解決8. 存儲于xml中需要的HTML轉(zhuǎn)義代碼9. jsp+servlet簡單實現(xiàn)上傳文件功能(保存目錄改進(jìn))10. python 寫函數(shù)在一定條件下需要調(diào)用自身時的寫法說明
