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