📜  锈模量 - Rust (1)

📅  最后修改于: 2023-12-03 15:12:32.710000             🧑  作者: Mango

锈模量 - Rust

Rust 是一门由 Mozilla 开发的系统编程语言,其于 2010 年首次公开发布,旨在解决 C 和 C++ 的安全性及并发性问题。与其它语言不同的是,Rust 的编译器检查出所有悬挂引用,保证了内存的安全性,同时,通过所有权机制,也实现了内存的高效管理。这些特性也导致 Rust 非常适合用于编写并发,且高性能的代码。

什么是锈模量?

锈模量是 Rust 语言中的一个重要概念,它是 Rust 编译器中的一种错误类型,通常会提示 “cannot move out of [variable] because it is borrowed” 类似的错误信息。这种错误通常出现在 Rust 中的 borrow 中,例如下面的 code:

fn main() {
  let mut v = vec![1, 2, 3]; // 定义可变变量 v 并初始化
    
  let first = &v[0]; // 创建一个不可变的 borrow 引用 first
  v.pop(); // 在 v 中删除最后一个元素
    
  println!("The first element is: {}", first); // 非法调用
}

上面的代码中,首先创建了一个可变的 vector v,然后在其上创建了一个不可变的 borrow 引用 first。接着,使用 v.pop() 删除了 vector v 中的最后一个元素,这会导致它内部的指针位置改变。最后,代码尝试使用不可变引用 first 定位 vector 中的第一个元素,但由于 vector 的内部指针位置已经改变,因此这个调用是非法的。

可以理解为被 borrow 之后,vector 的内部状态发生了改变,但 borrow 期间保持不变,所以当 borrow 引用整个 vector 时,它不能被修改或者移动。这就是 rust 中的 borrow 和借用的精髓。

如何避免锈模量?

Rust 的所有权机制确保只有一个可变借用是可用的,如果我们想要修改一个已经被 borrow 的变量,那么就必须先把它们转化成可变借用。例如前面的例子,如果需要修改 vector v,则需要先释放 first 变量的 borrow 引用,或者将其转化为可变引用。

fn main() {
  let mut v = vec![1, 2, 3]; // 定义可变变量 v 并初始化
    
  let first = &v[0]; // 创建一个不可变的 borrow 引用 first
    
  let mut_v = &mut v; // 转变为可变引用,然后删除最后一个元素
  mut_v.pop();
    
  println!("The first element is: {}", first); // 合法调用
}

这样,通过释放 borrow 引用或者通过转变为可变引用,Rust 的所有权机制就能正确地保证借用变量时的内存安全。