< 返回版块

binarytom 发表于 2020-09-05 21:51

微软在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


From 日报小组 TOM

社区学习交流平台订阅:

评论区

写评论
INFCode 2020-09-09 08:48

就在昨天,这个Rust PR(我正在做的)每晚都被合并到Rust中,这对编译器错误有着广泛的影响

似乎译错,应为“就在昨天,这个我正在做的Rust PR被合并到Rust Nightly版本中。”

1 共 1 条评论, 1 页