成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

C++之父:重點沒在下一個版本!而是如何寫好現代版的C++

原創 精選
人工智能
如何寫出現代風格的C++?為什么替代這門語言很難?AI潛在的風險,以及為何擁有多套略有差異的編譯器反而是一件好事?等等。

采訪 | Tim Anderson

整理 | 云昭

出品 | 51CTO技術棧(微信號:blog51cto)

上周,5月6-7日,于慕尼黑舉行的Qt World Summit大會上,C++之父Bjarne Stroustrup在其《21世紀的C++》主題演講前特別接受了外媒DevClass的專訪,訪談中涉及到很多,比如:

如何寫出現代風格的C++?為什么替代這門語言很難?AI潛在的風險,以及為何擁有多套略有差異的編譯器反而是一件好事?等等。

盡管演講題目如此,Stroustrup并未將重點放在C++26(下一個主要版本)即將到來的特性上,比如反射和契約(contracts)。

圖片圖片


他說:“這門語言并不只是最近新加進去的功能而已。要寫出符合當代的C++,你得把從語言誕生早期到現代的各種特性組合起來使用……我最主要想說的并不是‘有幾個特別棒的新特性你一定要用’,而是‘你應該用好現在這門語言本來的樣子’。它現在是一個更加連貫的整體,更高效、更具表現力、更安全。”

C++程序員應該用哪些特性,才能寫出‘現代風格’的代碼?

Stroustrup說:“很多關鍵點在于這些特性是如何相互配合的。我一直在努力讓程序員能用語言本身更直接地表達意圖。比如寫循環,現在95%到99%的循環場景其實都是‘對這個容器里的所有元素做點什么’,根本不用手動定義循環變量。你可以寫成‘for x in y’或類似的結構,直接表達你要做的事情。這樣編譯器更容易優化,程序員犯錯的概率也更低,代碼也更簡潔。”

他還提到范型編程:“類型通常是可以自動推導出來的,所以你總能得到正確的類型。”

另一個至關重要的點是資源管理。他說:“如果你用RTTI(運行時類型識別)來確保資源被正確釋放,比如對象被銷毀、文件被關閉等等,你需要有作用域來承載這些資源。所以,所有資源都應該由一個句柄(handle)來管理,句柄本身存在于作用域內。這樣,絕大多數內存泄漏問題就不見了。”

現代C++開發者有哪些做法是千萬不能做的?

“千萬不要把裸指針當作資源句柄來用。”他說,“如果這么做,就完全違背了我剛剛說的原則。也絕不要用單個裸指針去傳遞一組元素,比如指針指向數組。你根本不知道數組里有多少個元素,也無法做合理的范圍檢查。但如果你傳遞的是vector,它自己就知道自己有多少元素、是什么類型。”

“另外,我幾乎再也不用強制類型轉換(cast)了。范型編程的好處就在這里。不用類型轉換,類型錯誤的風險就大大降低。”

“以前要從函數里返回一大堆數據,通常做法是放到動態內存里,再把指針返回,然后還得記得手動delete。現在,直接把一個vector move出來就行,基本是零開銷。”

在演講中,Stroustrup還強調了模塊(modules)。用import語句來代替傳統的#include。因為#include是傳遞性的,順序會影響編譯結果,而且會導致重復編譯和一些隱晦的bug。而import沒有傳遞性,編譯也能一次性完成,大大提高效率。

他特別提到的其他特性還包括模板(templates)和概念(concepts)(C++20強制支持的標準特性)。他PPT上的一句話是:“用概念其實比不用更簡單。”他說,自己的生產環境代碼也沒有用什么比本次演講里更復雜的特性,而且基本測試通過之后,已經很多年沒有再遇到過資源泄漏。

如何強制團隊寫出符合現代C++風格的代碼呢?

Stroustrup承認這是個難題:“在大型代碼庫里,光靠手冊式的編碼規范根本行不通。我們需要工具支持。所以我正在做一套‘profiles’,可以根據設定好的規范來強制檢查。”

不過他也直言,這個機制目前還沒有被C++標準采納,短期內也不太可能:“很遺憾,標準委員會這件事上有點迷糊,沒能保證C++26里會加入。”

現在開發者可以用Clang-Tidy之類的工具來輔助檢查。“它已經實現了我稱之為‘C++核心指南(C++ Core Guidelines)’的一部分檢查功能,這是我跟Red Hat、微軟等公司聯合做的項目。”

他是否擔心AI對C++開發的影響?

“是的,我確實很擔心。不是說AI沒用,但它往往會把大家引導到以前人們常用但其實不好的做法上。更糟糕的是,我擔心人們會因此失去主動發現問題的能力,因為大家都習慣于讓AI幫你搞定。”

像谷歌Carbon這樣的新語言,會取代C++嗎?

他說:“如果你只針對一個小場景,要做出比C++更好的語言其實很容易。但C++的優勢就在于它能同時適用于非常多樣化的領域。再說了,就算這些語言成功了,它們也必須跟C++、Python這些語言互操作。如果我們不小心,最后可能不是一個‘過于龐大的C++’,而是‘十個都不完整、還互相勉強兼容的小語言’。”

C++演進是不是太慢了?

“你判斷是不是節奏合適的方法就是,看是不是有一半人覺得太慢,一半人又說太快。”Stroustrup笑說,“是的,我確實希望比標準委員會稍微快點。但標準委員會太龐大了,大家關注的點太多,這會拖慢節奏……不過,我估計更多C++程序員其實是覺得‘太快了’。”

不同C++編譯器實現標準的細節差異,會不會給開發者帶來麻煩?

“是的,但你要知道,每個主流編譯器,甚至每個非主流的嵌入式編譯器,用戶數量可能都比大多數語言多。而且,我很討厭‘單一生態(monoculture)’。如果歷史告訴我們什么,那就是一旦出現單一生態,一個bug或一個毒點,整個生態就完了。”

他說,雖然主流C++編譯器彼此實現不完全一致,但它們彼此之間差距其實已經越來越小了。“如果只有一個實現,當然有些好處,但那就是單一生態。而多個實現就能帶來競爭空間,也有利于創新。它們不可能完全一致——事實上,至今沒有任何一個C編譯器是100%標準兼容的,從來沒有過。”

參考鏈接:https://devclass.com/2025/05/09/interview-bjarne-stroustrup-on-21st-century-c-ai-risks-and-why-the-language-is-hard-to-replace/

責任編輯:武曉燕 來源: 51CTO技術棧
相關推薦

2021-10-11 11:53:07

C++接口代碼

2016-10-20 16:07:11

C++Modern C++異步

2021-05-28 18:12:51

C++設計

2018-11-30 17:59:06

華為

2019-06-10 19:00:23

Cmain函數編程語言

2021-01-04 07:57:07

C++工具代碼

2011-05-31 18:31:13

C++

2011-04-11 11:29:07

C++

2023-10-31 17:57:52

C++編程語言

2013-01-17 10:09:50

JavaSpring

2024-04-01 09:42:19

2010-01-26 15:51:06

C++變量

2013-08-28 14:32:19

移動電商

2011-09-16 10:00:56

C++

2011-07-12 10:06:19

Rails

2009-12-22 01:54:50

C++之父Bjarne Stro

2013-07-18 09:58:18

C++程序員

2011-01-05 11:12:34

C++

2023-08-24 13:23:58

LibreOffic開源

2023-02-08 07:05:44

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 狠狠爱免费视频 | 欧美videosex性极品hd | 国产最新精品视频 | 免费在线观看av的网站 | 日韩精品1区2区3区 国产精品国产成人国产三级 | 99成人| 中文字幕一区二区三区在线观看 | 亚洲精品乱码 | 91九色视频| 国产三级精品三级在线观看四季网 | 国产精品夜色一区二区三区 | 91视频一区二区三区 | 国产精品成人av | 久久精品一级 | 国产精品福利网站 | 日日噜 | 91综合网 | 91影片 | 国产这里只有精品 | 欧美一区2区三区4区公司二百 | 黄在线 | 99热在线播放 | 成人1区2区 | 欧美成人一级视频 | 日日天天 | 国产一区二区在线播放 | 欧美中文字幕一区二区三区 | 欧美国产日韩在线观看成人 | 久久亚 | 在线视频第一页 | 欧美视频成人 | www.久草| 美女一级毛片 | 91在线视频国产 | 在线欧美一区 | 插插宗合网 | 国产精品亚洲综合 | 亚洲福利视频一区二区 | 一区二区三区国产在线观看 | 国精久久 | 国产黄色一级电影 |