kieran

Kieran‘s Blog

The world will be better?
github

全面的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 之間的區別,前者是聲明了一個可變引用,我們可以修改這個引用綁定的值;後者聲明了一個指向可變變量的引用。

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。