自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

C++“中年危機(jī)”有救了!C++之父新動作!

原創(chuàng) 精選
開發(fā) 前端
Stroustrup首先指出“通常提到的安全性只是內(nèi)存安全——這是不夠的......與其他語言(包括C++和C)進(jìn)行互操作的需求往往不會被提及。而且轉(zhuǎn)換的成本可能非常高。這一點很少被提及......”

整理丨諾亞

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

在不久前TIOBE發(fā)布的10月編程語言排行榜上,C++一舉越過Java,摘得探花位,僅次于Python和C。年過四旬的C++依然是全球最流行的編程語言之一,不過近年來一些巨頭的動向也讓C++的安全性頻頻走向爭議的中心。

前有微軟透露正基于Rust 語言改寫 Windows 11 內(nèi)核,部分替代之前的 C++,后有谷歌聲稱正在將 Android 原生代碼從 C++ 遷移到 Rust,從而進(jìn)一步減少安全漏洞。

就在外界紛紛揣測C++如何應(yīng)對突如其來的中年危機(jī),是否真的應(yīng)該讓位于后起之秀時,近日C++之父Bjarne Stroustrup在上個月舉辦的編程語言年度大會上公開表態(tài):他將增加新的安全工具應(yīng)對批評,為全球數(shù)十億行C++代碼帶來新的解決方案。

圖片圖片

1、反駁:切換到新語言,沒那么簡單

對于那些認(rèn)為問題出在C++本身、解決方案是改用另一種語言的批評人士,這位已經(jīng)72歲的大佬予以了駁斥。

第一,安全性指的不僅僅是內(nèi)存安全。

第二,語言之間的互操作性需求往往會被忽視。

第三,語言切換的成本通常會被低估。

Stroustrup首先指出“通常提到的安全性只是內(nèi)存安全——這是不夠的......與其他語言(包括C++和C)進(jìn)行互操作的需求往往不會被提及。而且轉(zhuǎn)換的成本可能非常高。這一點很少被提及......”

“從我所看到的觀點來看,我們將用大約7種不同的語言來取代C++。也許在距今四十年后,我們可能會有20種不同的語言,它們必須相互操作。這將會很困難?!?/p>

Stroustrup還指出,“許多所謂的‘安全’語言將所有底層的東西都外包給了C或C++”,暫時脫離原始語言來訪問硬件資源,甚至操作系統(tǒng)(通常是用C編寫的)——甚至可能是極為古老的、藏在外部庫中的“可信代碼”……

Stroustrup把我們目前的情況稱為“一種漸進(jìn)式和進(jìn)化式的方法,而不是一味追求全新的方法?!本拖裆w爾定律:“一個有效的復(fù)雜系統(tǒng)勢必是從一個有效的簡單系統(tǒng)發(fā)展而來的。”

歸根結(jié)底,就像Stroustrup所指出的,切換語言可能看起來是在構(gòu)建一個新系統(tǒng),但是想越過所有舊系統(tǒng)的問題來解決一切,只是一個幻想。切換語言所要付出的代價可能遠(yuǎn)比你理想中的要高。

2、出新:“小心”是行不通的,“我們需要強(qiáng)制執(zhí)行的規(guī)則”

Stroustrup提到了安全性的許多概念,重點介紹了資源泄漏、溢出、內(nèi)存損壞、計時錯誤、并發(fā)錯誤、終止錯誤——當(dāng)然還有類型錯誤。隨后,他就C++安全性的發(fā)展趨向進(jìn)行了詳細(xì)闡釋。

Stroustrup稱當(dāng)前是“一個機(jī)會”,他強(qiáng)調(diào),類型和資源安全從C++誕生之初就一直是它的目標(biāo)?!拔覀儺?dāng)時的硬件無法提供完全的安全性,現(xiàn)在也無法對所有語言和所有用例提供完全的安全性。”但是Stroustrup也不希望看到對C++表達(dá)的限制,事實上他設(shè)想了一個仍然遵循該語言的ISO標(biāo)準(zhǔn)的解決方案。

“我們需要它是C++。也就是說,我們能做什么不應(yīng)該受到限制,即使我們?nèi)绾巫隹赡軙艿较拗??!?/p>

與此同時,Stroustrup 也不希望看到大量的額外運(yùn)行時開銷?!靶阅懿粦?yīng)該有任何下降......實際上,編寫安全代碼的一些技術(shù)可以提高性能。我主要談?wù)摰氖蔷幾g器和靜態(tài)檢查可以做什么,因為它是免費的,或者實際上可以提高性能。”

Stroustrup找到了他的解決方案:配置文件。也就是說,一套規(guī)則,只要遵守,就能實現(xiàn)特定的安全保證。它們將由ISO C++標(biāo)準(zhǔn)定義,解決常見的安全問題,如指針和數(shù)組范圍。   

至于添加新工具的困難,Stroustrup指出,C++編譯器本身現(xiàn)在是一個相當(dāng)復(fù)雜的靜態(tài)分析器,也可以滿足配置文件的要求。因此,在添加提高安全性的工具時,“我認(rèn)為配置文件注釋應(yīng)該有助于解決這個問題”。

Stroustrup列出了一般策略:使用靜態(tài)分析來消除潛在的錯誤。但Stroustrup補(bǔ)充說:“全局靜態(tài)分析是負(fù)擔(dān)不起的。”

“所以基本上我們需要規(guī)則來簡化我們正在編寫的內(nèi)容,使其能夠高效、低成本地分析——本地靜態(tài)分析……然后提供庫,使依賴這些規(guī)則變得可行。”

另外,他還指出了這種策略的另一個優(yōu)勢:“支持從舊代碼到提供擔(dān)保的現(xiàn)代代碼的逐步轉(zhuǎn)換。”將有一套標(biāo)準(zhǔn)的“基本”擔(dān)保,以及更大、更開放的可用擔(dān)保。Stroustrup說:“我想象的是類型和資源安全,內(nèi)存安全,范圍安全。諸如算術(shù)安全之類的東西是可以標(biāo)準(zhǔn)化的?!贝送?,還將制定規(guī)則,對不同的代碼片段應(yīng)用不同的保證。代碼甚至可以得到應(yīng)用了哪些保證的顯式表達(dá)式(從而使將來的讀者放心)。

Stroustrup簡要說明了一點:“小心”是行不通的。因此,雖然核心指導(dǎo)方針可能建議安全的編碼實踐,但“我們需要強(qiáng)制執(zhí)行的規(guī)則”。

“我們必須制定安全使用的規(guī)則。我們必須提供方法來驗證人們是否真的在做他們想做的事情?!盨troustrup指出,他所描述的大部分內(nèi)容已經(jīng)被嘗試過,甚至有規(guī)?;膶嵺`?!暗@些都沒有被整合成一個一致的、連貫的整體。這就是我認(rèn)為我們應(yīng)該做的。”

“衛(wèi)生規(guī)則+靜態(tài)分析+運(yùn)行時檢查”就是被提煉出的公式。Stroustrup說C++可以消除許多常見的錯誤,包括未初始化的變量,范圍錯誤,空指針解引用,資源泄漏和懸空引用。

在演講接近尾聲時,Stroustrup談到了更多的細(xì)節(jié)?!拔医ㄗh你采用基于模塊的控件?!?/p>

export My_module[[provide(memory_safety)]];
import std [[enable(memory_safety)]];
import Mod [suppress(type_safety)]];

還在開發(fā)中的是代碼內(nèi)控件,用于代碼片段。

[[suppress(type_safety)]] X
[[enforce(type_safety)]] X

3、合力:面向開發(fā)者的愿望清單

目前這項工作還在進(jìn)行中,你可以查到與之相關(guān)的論文和討論。Stroustrup談到:“從經(jīng)典的C,從‘帶類的C’,到C++11,我們已經(jīng)走了很長很長的路?!?   

面向開發(fā)者,Stroustrup建議用戶可以幫助完善配置文件并將其規(guī)范形式化。“我夢想著像 Profiles Light 這樣的東西,它提供了配置文件的大部分保證,但不能做所有最后的事情,因為,比如說,靜態(tài)分析器還不能做到這一點?!?/p>

Stroustrup創(chuàng)建了一個 GitHub 存儲庫,“人們可以在那里提出建議,我將把我的草稿等放在那里,這樣我們就可以創(chuàng)建一個社區(qū),致力于在合理的時間內(nèi)完成這些事情。

存儲庫詢問需要什么才能使配置文件成為“滿足各種 C++ 安全需求的全行業(yè)工具”,并將該概念稱為框架?!盀榱藢崿F(xiàn)廣泛使用,必須創(chuàng)建和安裝許多部件。雖然我們已經(jīng)做了很多工作,但廣泛可用的相對較少。這是一個愿望清單。請盡你所能提供幫助?!?/p>

圖片圖片

參考鏈接:

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

https://www.youtube.com/watch?v=I8UvQKvOSSw&t=4371s

責(zé)任編輯:武曉燕 來源: 51CTO技術(shù)棧
相關(guān)推薦

2023-06-25 14:58:08

C++語言Rust

2023-02-08 07:05:44

2009-12-22 01:54:50

C++之父Bjarne Stro

2011-07-14 17:45:06

CC++

2010-01-21 14:07:14

CC++聲明

2010-01-21 09:34:57

C++語法

2010-01-27 16:05:06

C++堆棧

2010-01-26 15:51:06

C++變量

2011-07-15 00:47:13

C++多態(tài)

2010-01-28 13:45:06

C++數(shù)組

2022-08-01 14:42:49

C++編程

2010-01-20 10:19:55

C++數(shù)組

2010-01-21 13:33:44

C++基類

2010-01-25 10:25:19

C++變量

2010-01-28 16:31:54

C++類型

2010-01-27 17:16:52

C++構(gòu)造函數(shù)

2020-08-21 13:20:36

C++If ElseLinux

2011-07-10 15:26:54

C++

2010-01-15 18:57:58

C++CLI

2010-01-28 10:33:10

C++開發(fā)程序
點贊
收藏

51CTO技術(shù)棧公眾號