【Rust日报】2020-09-05 微软在c++静态分析工具实现了一些rust的安全规则
微软在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
- 算法模板——splay区间反转 2
- 算法模板——Dinic网络最大流 2
- 1935: [Shoi2007]Tree 园丁的烦恼
- 1339 / 1163: [Baltic2008]Mafia
- 4010: [HNOI2015]菜肴制作
- 4052: [Cerc2013]Magical GCD
- ElasticSearch搜索引擎在SpringBoot中的实践
- 2292: 【POJ Challenge 】永远挑战
- 四边形不等式优化DP
- 4063: [Cerc2012]Darts
- 3997: [TJOI2015]组合数学
- 1349: [Baltic2006]Squint
- 遗传算法(2)
- 算法模板——线性筛素数
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法