微軟在c++靜态分析工具實作了一些rust的安全規則
Rust和c++是兩種流行的系統程式設計語言。多年來,c++的焦點一直放在性能上。我們越來越多地聽到來自客戶和安全研究人員的呼籲,認為c++語言應該有更強的安全保證。Visual Studio 2019 version 16.7 在c++的核心檢查中包含了四個新規則,以将Rust的一些安全特性合并到c++中。
文章連結,https://devblogs.microsoft.com/cppblog/new-safety-rules-in-c-core-check/
在Nightly Rust的路徑修整
就在昨天,這個Rust PR(我正在做的)每晚都被合并到Rust中,這對編譯器錯誤有着廣泛的影響。
在這篇文章中,我描述了這種變化以及從中可以期待什麼。
在錯誤中完整路徑的問題:如下所示的簡單程式将導緻類型錯誤。
fn main() {
let a = vec![vec![String::from("a")]];
let b = vec![String::from("b")];
a == b;
}
複制
類型錯誤可以描述為:
cannot compare between values of the types Vec<Vec<String>> and Vec<String>
。在PR改變之前,這幾乎是錯誤資訊的第一行,其餘的錯誤資訊提供了更多關于特征的細節:
error[E0277]: can't compare `std::vec::Vec<std::string::String>` with `std::string::String`
--> example.rs:5:7
|
5 | a == b;
| ^^ no implementation for `std::vec::Vec<std::string::String> == std::string::String`
|
= help: the trait `std::cmp::PartialEq<std::string::String>` is not implemented for `std::vec::Vec<std::string::String>`
= note: required because of the requirements on the impl of `std::cmp::PartialEq<std::vec::Vec<std::string::String>>` for `std::vec::Vec<std::vec::Vec<std::string::String>>`
複制
值得注意的是,在上述錯誤中,造成認知負擔的最大因素是類型和特征的完整合格路徑(例如std::vec:: vec)。對很多人來說,它的可讀性有很大的不同。
文章連結,https://blog.aloni.org/posts/path-trimming-in-rust-nightly/
窺視Rust枚舉(enum)的内部
在我的twitch頻道最近的Rust問答環節中,有人問了一個看起來很簡單的問題:為什麼像SmartString或SmolStr這樣的小字元串類型和string一樣大小,而像SmallVec這樣的小vec類型卻比vec大?
我知道我剛剛用了形容詞simple,但事實是:為了了解這個問題,我們需要一些背景知識。
文章連結,https://fasterthanli.me/articles/peeking-inside-a-rust-enum