C++之父Bjarne Stroustrup:我會為全球數十億行 C++ 代碼帶來一個嶄新的解決方案

2023-12-04     InfoQ

原標題:C++之父Bjarne Stroustrup:我會為全球數十億行 C++ 代碼帶來一個嶄新的解決方案

作者|David Cassel

譯者 | 王強

策劃 | Tina

在 CppCon C++ 會議上,這位 C++ 的創建人明確了該程式語言中迫切需要的安全措施具體都有哪些。

Bjarne Stroustrup,這位 72 歲的 C++ 創建者上個月在程式語言年度大會上發表了前瞻性的主題演講。

當 C++ 社區聚集在科羅拉多州奧羅拉市參加「CppCon」C++ 會議時,Bjarne Stroustrup 在一場演講中向觀眾承諾,他將首先明確該程式語言所需的安全措施的具體類型,「然後我將向大家展示幾十年來我們一直在這方面努力的成果。」

Stroustrup 花了一些時間來回應批評。批評者說問題出在 C++ 本身,解決方案應該是改用另一種語言。他還具體介紹了一項提案,該提案增加了新的安全工具來解決批評者指出的問題,最終會為全球數十億行 C++ 代碼帶來一個嶄新的解決方案。

反對更換程式語言的案例

在演講一開始,Stroustrup 分享了一張題為「安全不僅僅是類型安全」的幻燈片,列出了從資源泄漏和溢出到內存損壞和計時錯誤的各種各樣的安全問題。這裡有並發錯誤、終止錯誤——當然還有類型錯誤。「人們一般提到的安全性只涉及內存安全——但這還遠遠不夠……而且與其他語言(包括 C++ 和 C)互操作的需求往往缺乏關注。而且轉換程式語言的成本可能會非常高。很少有人提到這一點……」

「再說了——到底選哪種語言來代替呢?就我從目前大家的建議來看,我們將用大約七種不同的語言來取代 C++。到替換完成時(40 年後),我們可能會有 20 個不一樣的語言選項,而且它們必須能夠互操作。這會是一大難題。」

Stroustrup 在演講中還指出,「許多所謂的『安全』語言將所有低級內容外包給 C 或 C++」,用這種辦法來暫時逃避使用它們的語言來訪問硬體資源甚至作業系統(通常是用 C 語言編寫的),乃至「可信代碼」的需求,這些代碼實際上可能非常古老,隱藏在外部庫中……或者是用完全不同的程式語言編寫的。

Stroustrup 稱我們目前的情況是「處於使用漸進和漸進方法的趨勢中,而非只採取全新的方法。」一張幻燈片的結尾甚至引用了加爾定律:「一個有效的複雜系統總是由一個有效的簡單系統演化而來。」

正如 Stroustrup 所見,「這種只在一頭構建一個新系統,而不存在任何舊系統問題的想法是一種幻想。但這是一個非常流行的幻想。」

「我們接下來要走向何方?」

演講進行到大約 54 分鐘時,Stroustrup 告訴聽眾,「現在我想談談未來的事情:我們現在會走向何方……?」

Stroustrup 將我們目前的情況稱為「一個機會」,提醒大家自 C++ 誕生以來,類型和資源安全一直是其目標。「我們當時擁有的硬體無法保證完全安全,現在也無法保證所有語言和所有用例的安全。」但 Stroustrup 不希望看到 C++ 的內容表達受到限制,事實上,他設想了一種仍然遵守該語言 ISO 標準的解決方案。「我們需要它是 C++。也就是說,我們能做的事情不應該受到限制,儘管我們做事的方式可能會受約束。」

Stroustrup 也不希望看到大量額外的運行時開銷。「性能不應該有任何下降……實際上,一些編寫安全代碼的技術可以提高性能。我主要說的是編譯器和靜態檢查,因為它是免費的,或者真的可以提高性能。」

Stroustrup 找到了他的解決方案:配置文件。(指的是需要遵循的一組規則,可以實現特定的安全保證。)它們由 ISO C++ 標準定義,解決常見的安全問題,例如指針和數組範圍。在回答觀眾後來提出的,關於添加新工具的困難的問題時,Stroustrup 指出,C++ 編譯器本身現在是一個相當複雜的靜態分析器,並且還可以負責滿足配置文件的要求。因此,談到添加安全改進工具時,「我認為配置文件注釋應該有助於解決這個問題。」

Stroustrup 提出了總體策略:使用靜態分析來消除潛在錯誤。但「全局靜態分析是無法承受的,」Stroustrup 補充道。「所以基本上我們需要一些規則來簡化我們正在編寫的內容,以便有效且廉價地進行本地靜態分析...... 然後提供一些庫來更好地依賴這些規則。」

一張幻燈片還指出了另一個優點:「支持從舊代碼到提供安全保證的現代代碼的逐步轉換。」該幻燈片強調,將有一套標準的「基本」保證,以及更廣泛、開放的可用保證。Stroustrup 說:「我想到的是類型和資源安全、內存安全、範圍安全。算術安全之類的事情可以標準化。」並且還會有對不同代碼片段應用不同保證的規則。

代碼甚至可以得到應用保證的明確表達(從而讓未來的讀者放心)。Stroustrup 又切回了前面的幻燈片,也就是那張標題為「安全不僅僅是類型安全」的幻燈片,強調了資源泄漏、溢出、內存損壞、計時錯誤、並發錯誤、終止錯誤——當然,還有類型錯誤。

一張幻燈片簡潔地說明了這一點:「小心」並不能擴展。因此,雖然核心指南可能建議安全的編碼實踐,但「我們需要強制執行的規則。」正如 Stroustrup 所說,「我們必須制定安全使用規則。我們必須提供方法來驗證人們是否確實做了他們想做的事情。」Stroustrup 指出,他所描述的大部分內容都已經被嘗試過,甚至是規模化的實踐。「但沒有哪裡會將這一切整合成一個一致、連貫的整體。這就是我認為我們應該做的。」

一張幻燈片用六個詞列出了公式:衛生規則 + 靜態分析 + 運行時檢查。Stroustrup 放了一張幻燈片,表示 C++ 可以消除許多常見錯誤,包括未初始化的變量、範圍錯誤、空指針取消引用、資源泄漏和懸空引用。

演講接近尾聲時,Stroustrup 進一步闡述了細節。「我建議你採用基於模塊的控制。」該幻燈片展示了它在代碼中的工作機制。

代碼內控制項也在開發中,它可應用於代碼分段。

Stroustrup 還對首批標準配置文件提出了建議。(類型安全、範圍和算術)。Stroustrup 放了一包含 11 個新關鍵字的幻燈片,說道:「這裡從語法方面總結了如何做到這一點。」

「這項工作正在進行中,」Stroustrup 告訴觀眾。「有相關論文,你可以去查一下。也有相關討論。不過總體上我們還沒有成型。」但是「我們在經典 C、『帶類的 C』以及 C++ 11 後已經走了很長一段路。」

最後一張幻燈片說的是「你能提供什麼幫助」,Stroustrup 建議用戶可以幫助完善配置文件,正式確定它們的規格。(「我的理想是像 Profiles Light 這樣的東西,它提供了配置文件的大部分保證,但沒法大包大攬,因為靜態分析器還無法做到這一點。」)

他創建了一個 GitHub 存儲庫(https://github.com/BjarneStroustrup/profiles),「大家可以在其中提出建議,我也可以在裡面放我的草稿等,這樣我們就可以創建一個社區,設法在合理的時間內完成這些工作。」

這個存儲庫提出的問題是怎樣才能讓配置文件成為「滿足各種 C++ 安全需求的全行業工具」,並將該概念稱為一個框架。「必須開發並部署許多組件才能讓工具廣泛流行。大家已經做了很多工作,但廣泛應用的工具卻相對較少。這裡是一個願望清單。請盡你所能提供幫助。」

視頻連結:https://youtu.be/I8UvQKvOSSw

原文連結

https://thenewstack.io/bjarne-stroustrups-plan-for-bringing-safety-to-c/

滴滴 P0 事故,K8s 背鍋?拼多多正式登頂中國電商巨頭,馬雲阿里內網罕見發言;學霸女兒創業AI項目火了,老爸公司漲停|Q資訊

ChatGPT 一周年:生成式 AI 出現後,我決定以後砸鍋賣鐵都不讓後代當程式設計師了

亞馬遜 CTO 20 年架構經驗之道:儉約架構師的七大黃金法則!

全球首款開源實時作業系統!開發了 20 多年、部署在超 120 億台設備上的 ThreadX 正式開源

文章來源: https://twgreatdaily.com/zh-mo/c8d901103254f8316a7addd5db90a059.html