Rust学习笔记

来源:互联网 发布:c语言头文件sum 编辑:程序博客网 时间:2024/05/20 13:05

Rust学习笔记-01

Rust语言特征比较接近与c语言,与Java相差较大。
Rust 注重安全和速度。
Rust是一个“基于表达式”的语言,它意味着Rust中几乎所有的东西都是一个表达式并返回一个值。
Rust 中有两种类型的语句:“声明语句”和“表达式语句”。其余的一切是表达式。
let 语句的左侧远比一个赋值绑定强大。例如,可以用let语句来给变量重新赋值,也可以用来解构/拆开元组(triple)。
Rust所追求最大的目标 – 内存安全,关键在于所有权。


Rust 注重安全和速度。它通过很多零开销抽象(zero-cost abstractions)来实现这些目标,也就是说在 Rust 中,实现抽象的开销尽可能的小。所有权系统是一个典型的零开销抽象的例子。本文提到所有的分析(是否大部分???)都是在编译时完成的。你不需要在运行时为这些功能付出任何开销。


Rust 中的借用有一些规则:
第一,任何借用必须位于比拥有者更小的作用域。
第二,你可以有一个或另一个这两种类型的借用,不过不能同时拥有它们(这两种):

  • 0 个或 N 个资源的引用(&T)
  • 只有 1 个可变引用((&mut T)

    通过引用,你可以拥有你想拥有的任意多的引用,因为它们没有一个在写。如果你在写,并且你需要2个或更多相同内存的指针,则你只能一次拥有一个 &mut 。这就是Rust如何在编译时避免数据竞争:如果打破规则的话,我们会得到错误。
    需要注意的地方:

  • 在 Rust 中,借用绑定在借用有效的作用域上。
  • 引用必须与它引用的值存活得一样长

借出一个其它人所有资源的引用可以是很复杂的。例如,想象一下下列操作:
1. 我获取了一个某种资源的句柄
2. 我借给你了一个关于这个资源的引用
3. 我决定不再需要这个资源了,然后释放了它,这时你仍然持有它的引用
4. 你决定使用这个资源
噢!你的引用指向一个无效的资源。这叫做悬垂指针(dangling pointer)或者“释放后使用”,如果这个资源是内存的话。
要修正这个问题的话,我们必须确保第四步永远也不在第三步之后发生。Rust 所有权系统通过一个叫生命周期(lifetime)的概念来做到这一点,它定义了一个引用有效的作用域。


只有应用(reference (‘&’))才有生命周期。
生命周期的3条规则:
- 每一个被省略的函数参数成为一个不同的生命周期参数。
- 如果确实有一个输入生命周期,不管是否省略,这个生命周期被赋予所有函数
- 返回值中被省略的生命周期。
- 如果这里有多个输入生命周期,不过它们当中有一个是 &self 或者 &mut self , self 的生命周期被赋予所有省略的输出生命周期。

0 0
原创粉丝点击