kieran

Kieran‘s Blog

The world will be better?
github

Comprehensive Rust教程

第一天:早上#

1. 什么是 Rust#

rust 是一种静态编译语言,其功能定位与 cpp 相似

  • rustc 使用 LLVM 作为它的后端
  • rust 和 cpp 适用于类似的场景
    • 极高的灵活性。
    • 高度的控制能力。
    • Can be scaled down to very constrained devices such as microcontrollers.
    • 没有运行时和垃圾收集。
    • 关注程序可靠性和安全性,而不会牺牲任何性能。

2. 为什么选择 rust#

rust 的一些独特点:

  • 编译器内存安全
  • 没有运行时未定义行为
  • 现代编程语言特性

2.1 编译期保障#

编译期静态内存管理:

  • 不存在未初始化的变量。
  • 不存在内存泄漏。
  • 不存在 “双重释放”。
  • 不存在 “释放后使用”。
  • 不存在 NULL 指针。
  • 不存在被遗忘的互斥锁。
  • 不存在线程之间的数据竞争。
  • 不存在迭代器失效。

2.2 运行时保障#

Rust 没有运行时未定义行为:

  • 数组访问有边界检查。
  • Integer overflow is defined (panic or wrap-around).

2.3 现代特性#

语言特性:

  • 枚举和模式匹配
  • 泛型
  • 无额外开销外 FFI
  • 零成本抽象

工具:

  • 强大的编译器错误提示
  • 内置依赖管理器
  • 对 UT 的内置支持
  • 优秀的语言服务协议的实现

3. 基本语法#

3.1 标量类型#

类型字面量
有符号整数i8i16i32i64i128isize-1001_000123_i64
无符号整数u8u16u32u64u128usize012310_u16
浮点数f32f643.14-10.0e202_f32
字符串&str"foo""two\nlines"
Unicode 标量类型char'a''α''∞'
布尔值booltruefalse
各类型占用的空间为:
  • iNuN 和 fN 占用 N 位,
  • isize 和 usize 占用一个指针大小的空间,
  • char is 32 bits wide,
  • bool is 8 bits wide.

3.2 复合类型#

类型字面量
数组(Arrays)[T; N][20, 30, 40][0; 3]
元组(Tuples)()(T,)(T1, T2), …()('x',)('x', 1.2), …
数组的赋值和访问:
fn main() {
	let mut a: [i8; 10] = [42; 10];
	a[5] = 0;
	println!("a: {:?}", a);
}

元组的赋值和访问

fn main() {
    let t: (i8, bool) = (7, true);
    println!("t.0: {:?}", t.0);
    println!("t.1: {:?}", t.1);
}

3.3 引用#

Rust 也提供了引用类型

fn main() {
    let mut x: i32 = 10;
    let ref_x: &mut i32 = &mut x;
    *ref_x = 20;
    println!("x: {x}");
}

注意 let mut ref_x: &i32let ref_x: &mut i32 之间的区别,前者是声明了一个可变引用,我们可以修改这个引用绑定的值;后者声明了一个指向可变变量的引用。

加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。