C++最大的敵人是它的過去

慧都控制元件網發表於2014-12-02

在過去的幾年裡,我們談到了關於“C++的復興”。我們不得不承認微軟是這項運動中主要參與者,我記得在Craig Symonds和Mohsen Agsen在視訊中提到了這件事。

在2011年,微軟寫了許多文章來宣佈C++的迴歸,並且眾多微軟專家如Herb Sutter在很多會議上解釋了為什麼C++會重新崛起,主要原因是現代C++的推廣使用。而同一時間。C++11標準的認可使我們重新把C++作為一門新的語言來討論。

然而,截至到2011年,C++已經有超過30年的歷史了。因此,讓開發人員相信關於新的C++已經簡化了過去許多令人失望的用法,而是使用了一種改進了C++程式碼的全新方法不是一件容易的事情。

讓我們以記憶體管理為例,這也許是C++中最受爭議的地方。多年來,物件的分配是通過new這個關鍵字來完成,開發者必須牢牢記住在程式碼中某些地方呼叫delete。“現代的C++”解決了這個問題並推進了共享指標的使用。

但是,關於現代C++的推廣光靠活躍的C++社群和知名專家是不夠的。有一句諺語是:“習慣成自然。”當你努力向某些人推介某個語言或者工具,他有可能覺得你有道理但是卻不會照著你想的做。

這就是在C++上發生的事情,我們中的許多人仍然堅持使用new和delete,而這種影響還要持續很多年,而且許多非C++的開發者也會一直通過呼叫複雜的記憶體分配方式來使用這門語言。

C++的過去影響了很多東西甚至從專案的建立之初,許許多多的開發者仍然認為這門語言非常複雜。

C++的過去是如何在影響著它?

為了發現這點,我們來做一個測試,我們在網路上使用baidu搜尋“C++物件分配”,查詢第一個連結便是“C++中是怎樣分配堆物件的?唯一的方法就是用new…”。這很令人吃驚,而搜尋頁前面談論共享指標、智慧指標的文章幾乎沒有。

另一個有趣的測試是到到任何大學的圖書館去找一本關於C++的書,去閱讀關於物件分配的那一章節,你基本上不會找到關於“共享指標、智慧指標”的介紹。

而C++開發者想要了解它們,一般查詢的資源是來自於“C類”而不是現代C++。

如何預防C++的過去所帶來的影響?

這裡並沒有特別有效的解決方案。我們可以希望C++編譯器通過發出一些關於最新更新的啟用和棄用警告,就象過去的字串操作一樣(strcpy、strcat),但這個解決方案也不是根本的解決之道。現代C++新技術的推動需要學習和實踐。

另外一個解決方案是將“C++”更名為“現代C++”,這個解決方案很簡單也很有趣。在網路上搜尋“現代C++”,那麼在我們談論的現代C++的物件分配問題上,第一個連結就談論了“智慧指標”。

因此,在未來的C++推廣之路上,我們可以提醒新的C++開發者,在網路上查詢關於C++的資料時,“現代C++”和“C++”會是兩個非常不同的搜尋結果,前者代表C++的最新用法,而後者只代表過去。

相關文章