展會信息港展會大全

C++ 之父 2024 爐邊談話:現(xiàn)代 C++ 設計哲學、技術(shù)變革與安全爭議
來源:互聯(lián)網(wǎng)   發(fā)布日期:2024-12-12 08:18:09   瀏覽:309次  

導讀:作者 | 《新程序員》編輯部出品 | CSDN(ID:CSDNnews)如果說系統(tǒng)軟件是軟件領域的皇冠,那么 C++ 就是皇冠上的珍珠。在四十余載的技術(shù)變遷中,C++不斷拓展其應用邊界。近年的編程語言排行榜上,C++一騎絕塵超越 Java,并在今年六月領先 C 語言,居編程語言排行榜第二位。同時,隨著大模型重塑計算范式和開發(fā)范式,業(yè)界對軟件安全性的重視前所未有,軟件開發(fā)迎來全新的篇章。 ......

作者 | 《新程序員》編輯部出品 | CSDN(ID:CSDNnews)如果說系統(tǒng)軟件是軟件領域的皇冠,那么 C++ 就是皇冠上的珍珠。在四十余載的技術(shù)變遷中,C++不斷拓展其應用邊界。近年的編程語言排行榜上,C++一騎絕塵超越 Java,并在今年六月領先 C 語言,居編程語言排行榜第二位。同時,隨著大模型重塑計算范式和開發(fā)范式,業(yè)界對軟件安全性的重視前所未有,軟件開發(fā)迎來全新的篇章。

C++ 之父 2024 爐邊談話:現(xiàn)代 C++ 設計哲學、技術(shù)變革與安全爭議

在這樣的背景下,12 月 5-6 日的「2024 全球 C++及系統(tǒng)軟件技術(shù)大會」邀請C++之父、美國國家工程院、ACM、IEEE 院士 Bjarne Stroustrup 跨洋連線,發(fā)表主題演講《重新認識 C++:跨世紀的現(xiàn)代演進》,并在爐邊談話環(huán)節(jié)同與會者展開了一場精彩的對話。

在這場由 CSDN 高級副總裁李建忠與 Codeplay 技術(shù)副總裁 Michael Wong 主持的一小時爐邊對話中,Stroustrup 在紐約的家中,展現(xiàn)出了一位技術(shù)領袖的深邃思考,回答了與會者提出的一系列關(guān)鍵問題。這些問題涵蓋了技術(shù)選擇、工程實踐、人才培養(yǎng)等多個維度,字里行間流露出他對編程語言、軟件系統(tǒng)的深刻理解,以及對技術(shù)演進規(guī)律的獨到見解。

核心議題

從貝爾實驗室到 AI 時代的技術(shù)沿革

當代軟件開發(fā)中的安全實踐

編程語言的設計哲學與取舍

人工智能時代的計算架構(gòu)變革

回應白宮與 Rust 社區(qū)對 C++ 安全性的質(zhì)疑

新語言的興起對社區(qū)生態(tài)的影響

C++ 標準演進中的代際更迭

新一代程序員的成長之道

以下為對話實錄:

第一問:如何看待 C++ 被質(zhì)疑“不夠安全”?Michael Wong:在您的演講中,您詳細探討了 C++ 的安全規(guī)格配置和指南。與現(xiàn)代強調(diào)安全特性的編程語言(如 Rust)相比,C++ 常被批評“不夠安全”。您如何看待這種觀點?C++ 在維持自身特色的同時,正在采取哪些措施來應對這些挑戰(zhàn)?

Bjarne Stroustrup:如果我們采用現(xiàn)代 C++ 的編程方式,嚴格遵循《C++ 核心指南》(The C++ Core Guidelines),很多安全問題就不會出現(xiàn)。舉個例子,我已經(jīng)很多年沒有遇到未被捕獲的數(shù)組越界問題了。在教學實踐中,盡管我現(xiàn)在較少親自授課,但當其他教師使用我的教材時,我都建議使用范圍檢查庫。我們會確保所有操作都有范圍檢查保護,因為沒有人愿意看到學生們遭遇那些完全可以避免的緩沖區(qū)溢出錯誤。所以基本原則很簡單:不要固守舊的編程方式,要擁抱現(xiàn)代 C++,它是安全的。

我們的終極目標是實現(xiàn)類型安全和資源安全,現(xiàn)在這個目標已經(jīng)觸手可及。當前的主要挑戰(zhàn)在于缺乏完善的施行機制。雖然我們已經(jīng)有了一些執(zhí)行機制,但我們希望能做得更好,并將其標準化。這正是我目前的工作重點將配置文件的概念引入語言,并建立初始的配置文件集。一旦這項工作完成,C++ 的安全性將超越大多數(shù)所謂的現(xiàn)代語言。說實話,那些現(xiàn)代語言也并不像它們宣稱的那樣安全,它們的安全保證往往是不完整的。比如說,它們?nèi)狈Y源安全性。在這些語言中,僅僅通過泄漏文件句柄或線程句柄就可能導致系統(tǒng)崩潰。這顯然不是我們想要的結(jié)果。而且,這些標榜安全的語言在處理一些底層任務時,比如硬件操作、設備驅(qū)動程序開發(fā)、系統(tǒng)調(diào)用等,往往還是要依賴 C 語言。而 C++ 本來就應該能夠處理這些工作,這是它的核心職責之一。因此,我們不能也不應該把這些工作交給其他語言。誠然,這使得提升 C++ 的安全性變得更具挑戰(zhàn)性,但這個目標是可以實現(xiàn)的。

最關(guān)鍵的問題是時間。要知道,推動一個擁有六七百萬開發(fā)者、數(shù)十億行代碼的龐大社區(qū)轉(zhuǎn)型,比創(chuàng)建一個適用范圍較窄的新語言要困難得多。那些新語言容易在特定領域展示某些安全特性,但 C++ 面臨的挑戰(zhàn)更加綜合。我始終認為,安全性是一個多面的概念。我就列舉過大約十種不同的安全方法,它們在不同場景下、對不同用戶都有其特殊的重要性。我們需要能夠?qū)崿F(xiàn)多種安全概念。如果認為內(nèi)存安全就是全部,這種想法過于片面。我們追求的是全面的類型安全和資源安全。

第二問:C++ 真的過于復雜了嗎?李建忠:C++ 的復雜性一直是業(yè)界爭論的焦點。在您的演講中,您展示了現(xiàn)代 C++ 如何實現(xiàn)更高的安全性、更好的簡潔性和更快的性能。但很多人,特別是新手,仍然覺得 C++ 過于復雜。您如何看待這種觀點?您認為應該如何提升 C++ 的易用性?

Bjarne Stroustrup:這個問題值得仔細思考。首先,我們要認識到,很多對 C++ 的批評并不那么客觀公正。比如,有些批評針對的是一些 C 語言風格的用法,而這些用法在過去 20 年里就已經(jīng)被優(yōu)秀的 C++ 程序員摒棄了。當然,我也承認 C++ 確實很復雜,如果有人試圖掌握它的所有細節(jié),學習過程必然會很困難。我經(jīng)常遇到程序員說“我想了解所有的東西”,但我總是告訴他們,這沒有必要,我自己也不需要知道所有細節(jié)。這正是為什么我們有 CppReference(cppreference.com) 這樣的參考資料,當需要查詢某個標準函數(shù)的具體參數(shù)時,隨時可以去查閱

我認為更重要的是理解語言的基礎原理,掌握那些能夠幫助我們更好地解決問題、開發(fā)軟件的核心功能。我們應該專注于在這些基礎特性和核心庫的框架內(nèi)工作。這也是我們制定《C++ 核心指南》并在此基礎上發(fā)展配置文件的原因,我們希望幫助開發(fā)者專注于 C++ 最安全、最實用、最易維護的部分。之前我也提到過,開發(fā)者們一方面要求語言簡單,另一方面又需要更多特性,同時還想保持兼容性。在這三個訴求之間找到平衡確實很有挑戰(zhàn)。

我認為解決方案在于:保持語言本身的穩(wěn)定性和兼容性,同時幫助人們更好地使用現(xiàn)代 C++ 特性,也就是我今天演講中提到的這些內(nèi)容。不過目前 C++ 的開發(fā)工具鏈還有提升空間。這些年來,我一直在呼吁開發(fā)更好的構(gòu)建系統(tǒng)和包管理工具。雖然這個目標還沒有完全實現(xiàn),但進展是明顯的。比如 CMake 就在不斷改進,其他一些構(gòu)建系統(tǒng)也在變得越來越好。只是這些工具還沒有成為標準,我相信在這方面我們還能做得更好。

第三問:C++ 的哪些發(fā)展超出了您的預期?Michael Wong:回顧 C++ 從“帶類的 C”(C with classes)到今天的發(fā)展歷程,什么最讓您感到意外?現(xiàn)在的一些應用場景是否超出了您最初的設想?

Bjarne Stroustrup:最讓我感到驚訝的是 C++ 真的發(fā)展到了今天這樣的規(guī)模。說實話,我最初并沒有打算開發(fā)一門通用編程語言。我的初衷很簡單,就是想編寫一些代碼,想要提前十年實現(xiàn)第一個 Unix 集群。但事情的發(fā)展出乎意料,我的同事們開始使用這門最初叫“帶類的 C”的語言,后來它被命名為 C++。這對我來說是個巨大的驚喜。要知道,我們沒有做任何宣傳和營銷,C++ 就這樣自然地成長起來了。

如果看增長曲線,會發(fā)現(xiàn)它是指數(shù)級的在最初的 10 到 11 年間,每七個半月 C++ 的用戶數(shù)量就翻一番。這太令人驚訝了,不過當時我忙于確保一切正常運轉(zhuǎn),沒有太多時間去思考這些現(xiàn)象。

后來另一個轉(zhuǎn)折點出現(xiàn)在 2000 到 2005 年間,C++ 社區(qū)出現(xiàn)了萎縮。這其實不難理解,因為當時美國政府、微軟、Sun 都在大力推廣其他編程語言。但更有趣的是接下來發(fā)生的事:這個下行趨勢最終被扭轉(zhuǎn)了。如果看今天的數(shù)據(jù),我們又看到了一個指數(shù)增長曲線。雖然增長速度不再是每七個半月翻一番(具體數(shù)字我也沒有相關(guān)數(shù)據(jù)來估計),但分析表明,這種反彈有其深層原因:開發(fā)者們不太愿意被限制在專有語言中。他們希望能夠在所有平臺上工作,希望同樣的代碼能運行在 Windows、Unix、Linux、Android 等各種環(huán)境中。雖然各個平臺的擁有者都在推廣他們自己的語言,但 C++ 這樣能在各處都表現(xiàn)良好的語言反而成為了理想的解決方案。

與此同時,硬件發(fā)展也遇到了瓶頸。處理器速度不再持續(xù)提升,單線程性能停滯不前,有時甚至出現(xiàn)下降。在這種情況下,C++ 的優(yōu)勢再次凸顯:優(yōu)秀的 C++ 程序員能夠?qū)崿F(xiàn)比硬件升級更顯著的性能提升,這也是推動 C++ 重新崛起的重要因素。

回過頭來看語言特性,構(gòu)造函數(shù)/析構(gòu)函數(shù)這對配套技術(shù),以及由此衍生的 RAII(資源獲取即初始化),它們的重要性遠超出了我最初的預期。這些特性是我在開發(fā)“帶類的 C”的最初一兩周就加入的,當時只是覺得顯然需要它們,因為我有操作系統(tǒng)開發(fā)的背景。后來我才知道其他語言既沒有多個構(gòu)造函數(shù),也沒有析構(gòu)函數(shù)這樣的概念。但事實證明,這成為了 C++ 最有用、最成功的技術(shù)基石,也是解決許多性能問題的關(guān)鍵。

舉個例子,當你使用基于作用域的資源管理時,就自然而然地最小化了資源的持有時間。這一點極其重要,因為如果資源(無論是線程、內(nèi)存還是其他)的持有時間增加一倍,你就需要雙倍的硬件資源來支撐。

第四問:大語言模型將如何影響 C++?李建忠:大語言模型正在給軟件行業(yè)帶來一場技術(shù)革命。您認為它會重塑編程語言嗎?對 C++ 會產(chǎn)生怎樣的影響?

Bjarne Stroustrup:我首先要聲明,我并非 AI 大語言模型領域的專家。說到我與 AI 唯一的淵源,可能就是 TensorFlow 這類 AI 工具是用 C++ 開發(fā)的這一點了。從某種意義上說,C++ 構(gòu)成了當前 AI 技術(shù)的基礎設施,這本身倒是一個意想不到的發(fā)展。我本該更早提到這一點的,但我對 AI 領域的了解確實有限。

不過我相信,大語言模型確實能幫助開發(fā)者處理許多重復性的日常工作。同時,我也認為(雖然這只是一種直覺,沒有具體證據(jù)支持),仍然會有大量工作需要人的創(chuàng)造力,特別是在處理那些 AI 模型訓練數(shù)據(jù)中未曾出現(xiàn)過的新問題時。

所以,如果要給開發(fā)者一個建議:專注于提升自己的編程能力,不要把精力過多投入到那些瑣碎的、人人都在做的事情上。

第五問:過往版本中最自豪和最遺憾的設計決策是什么?貝爾實驗室。在劍橋大學時,我遇到了幾位很好的老師,其中

贊助本站

相關(guān)內(nèi)容
AiLab云推薦
展開

熱門欄目HotCates

Copyright © 2010-2025 AiLab Team. 人工智能實驗室 版權(quán)所有    關(guān)于我們 | 聯(lián)系我們 | 廣告服務 | 公司動態(tài) | 免責聲明 | 隱私條款 | 工作機會 | 展會港