Rust 從基礎到精通 — 第 1 講
透過所有權和借用安全地處理內存
該部落格上撰寫的文章是出於教學目的而創建的。 另外,文章中的資訊可能不正確,請謹慎。
Rust 是一種系統程式語言,旨在在沒有垃圾收集器的情況下維護記憶體安全。 當創建效能很重要的程式時,我們嘗試在編譯階段減少無效指標和資料競爭。
價值觀有主人
Rust 中的值預設有一個擁有者。 當所有者超出範圍時,值會自動清除。
fn main() {
let name = String::from("Rose");
print_name(name);
//名稱的所有權已轉移至函數。
}
fn print_name(value: String) {
println!("{value}");
}
String如果將其作為值傳遞給函數,所有權就會轉移。 如果呼叫方想繼續使用它,它就會借出該值。
透過引用借用值
fn main() {
let name = String::from("Rose");
print_name(&name);
println!("{name}");
}
fn print_name(value: &String) {
println!("{value}");
}
&String是不具有值且被簡要閱讀的參考。 更改值&mut String您應該使用這樣的可變引用:
阻止您同時建立多個可變引用的規則一開始很棘手。 相反,它可以防止執行期間可能發生的錯誤記憶體存取和競爭條件。
將失敗的可能性表達為一種類型
Rust 經常使用 Option<T> 表示值可能不存在,並使用 Result<T, E> 表示操作可能失敗。
fn divide(a: i32, b: i32) -> Result<i32, String> {
if b == 0 {
return Err(String::from("它不能被 0 除。"));
}
Ok(a / b)
}
呼叫程式碼必須明確處理成功和失敗。 Rust 中的安全性也包括使錯誤難以被忽視。
Rust 專案是cargo new, cargo run, cargo test它使用相同的 Cargo 命令進行管理。 首先,與其嘗試記住所有所有權規則,不如建立一個小型命令列程式並按照編譯器訊息檢查借用範圍。