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