我们都爱想念熊
Rust 是否限制了程序员的能力发挥? 答案是肯定的。
Rust限制了程序员写出不安全代码的能力。
程序员水平不一, 让他们随意发挥不知道能写出什么代码来. 你可能觉得这种写法没有问题, 但是编译器不这样认为。
Rust 语法限制很多,但大多数都是为了阻止程序员写出不安全的代码。如果用C++完成某一功能有10条路可以走,那么用Rust完成同样的功能可能只有2条路可 以走。Rust通过语法限制配合Rust runtime,把那些可能出现data race、dangling reference、double free等问题的不安全道路堵死了。
比如,大多编程语言对于引用的使用都没有限制,而Rust则通过对引用施加一些规则,避免了data race的问题:Rust中,一个变量的引用分为可变引用和不可变引用,前者可以读写变量值,后者只能读变量值。对于同一作用域内的同一变量,该变量的引 用必须满足下述规则之一:
- 该变量只有一个可变引用
- 该变量有多个可变引用,且每个引用的作用域不相交
- 该变量只有若干个不可变引用
- 该变量既有可变引用又有不可变引用,且每个引用的作用域不相交
如果代码不满足上面任何一个规则,那么代码就有潜在的data race风险,将不能通过编译。下面这段代码不满足上面的规则,编译时会出错。
// 这段代码定义了一个可变引用r1,和不可变引用r2,
// 但二者作用域相交,将无法通过编译
fnmain() {
let mut s = Stringfrom("Hello World!");
let r1 = &mut s;
let r2 = &s;
println!("value of s: {}\