欢迎,本书将教你一些 Rust 编程语言 这方面的知识。
Rust 是一门由 Mozilla 主导开发的实验性跨平台编译型编程语言,它的设计准则为“安全,快速,并发”。
Rust 没有垃圾回收。
相对其它语言,Rust 有一些优点:容易嵌入其它语言,对时间和空间有限制,低级语言(像设备驱动、集成操作系统)。
Rust 通过排除数据竞争(data race),把许多未知的错误消灭在编译的时候。
本书分为 7 个章节:
- 简介 - 了解及准备工作。
- 学习 - 通过一些小项目进行练习并入门。
- 进阶 - 学习 Rust 所拥有的一些特性。
- 语法和语义 - 理解每一行 Rust 代码。
- 进化中的 Rust - 学习一些尚未稳定但很有意思的 Rust 特性。
- 术语表 - 本书所使用到的一些术语。
- 学术研究 - 关于 Rust 有哪些学术研究。
阅读完本“简介”后,你可以选择“学习”或“语法和语义”进行学习。
本书原文在 Github
fn main() {
let mut x = vec!["Hello", "world"];
}
fn
表示定义一个方法
let
表示定义一个变量
这里通过关键字 vec
加 !
定义了一个类型为 Vec<T>
的变量 x
mut
表示此变量可变(默认是不可变的)。
值得说明的是:在这里我们不需要做“类型声明”。尽管 Rust 是“静态类型”的,但在一些情况下它们运行“类型推断”。
在上面的基础上,添加代码:
fn main() {
let mut x = vec!["Hello", "world"];
let y = &x[0];
}
在这里 y
引用 x
的第一个元素,它和其它语言里的“指针”概念类似。
fn main() {
let mut x = vec!["Hello", "world"];
let y = &x[0];
x.push("foo");
}
目的很简单,我们想把 “foo” 增加到 x
error: cannot borrow `x` as mutable because it is also borrowed as immutable
x.push("foo");
^
note: previous borrow of `x` occurs here; the immutable borrow prevents
subsequent moves or mutable borrows of `x` until the borrow ends
let y = &x[0];
^
note: previous borrow ends here
fn main() {
}
^
不能随便这么做,因为 x
已经有引用 y
直接更改它的值是很危险的。
改为:
fn main() {
let mut x = vec!["Hello", "world"];
let y = x[0].clone();
x.push("foo");
}
或:
fn main() {
let mut x = vec!["Hello", "world"];
# y 仍然是 x 第一个元素的引用,但作用限定了作用域
{
let y = &x[0];
}
x.push("foo");
}