Rust教學
Rust下載和安裝
Rust簡介
Rust Hello World
Rust的特點
Rust註釋
Rust開發環境安裝
Rust文檔
Rust第一個程序
Rust格式化打印
Rust調試
Rust顯示
測試用例:列表
Rust格式化
Rust原語
Rust常量和運算符
Rust元組
Rust數組和切片
Rust自定義類型
Rust結構
Rust可視性
Rust枚舉
Rust常量
Rust變量綁定
Rust變量綁定-可變性
Rust變量綁定-範圍和陰影
Rust變量綁定-聲明
Rust類型轉換
Rust類型轉換 - 字面量
Rust類型轉換-推導
Rust類型轉換 - 別名
Rust表達式
Rust if/else語句
Rust循環
Rust嵌套和標籤
Rust while循環
Rust for和範圍
Rust匹配/match
Rust匹配析構元組
Rust解構枚舉
Rust指針和引用
Rust解構結構
Rust Guards
Rust綁定
Rust if let
Rust while let
Rust函數
Rust方法
Rust閉包
Rust捕捉
Rust作爲輸入參數
Rust匿名類型
Rust輸入函數
Rust作爲輸出參數
Rust不可恢復的錯誤
不可恢復的錯誤是檢測到的錯誤,程序員無法處理它。 當發生這種錯誤時,panic!
宏會被執行。panic!
打印失敗消息。 panic!
清理堆棧然後退出。
**展開(Unwinding)**:展開是一個清理它遇到的每個函數的堆棧內存中的數據的過程。 但是,展開過程需要大量工作。Unwinding
的替代方案是Aborting
。
**中止(Aborting)**:中止是在不清除堆棧內存中的數據的情況下結束程序的過程。操作系統將刪除數據。如果從展開切換到中止,那麼需要添加以下語句:
panic = 'abort';
下面來看一個panic!
宏的簡單示例:
fn main()
{
panic!(?No such file exist?);
}
執行上面示例代碼,得到如下結果 -
在上面的輸出中,第一行顯示錯誤消息,它傳達兩個信息,即panic
消息和錯誤的位置。 panic
消息是「沒有這樣的文件存在」 和 error.rs:3:5
表示文件的第三行和第五個字符。
注意:一般來說,不實現
panic!
在程序代碼中,包含文件名和行號的錯誤消息可以在其他人的代碼中調用panic!
宏。
panic!的好處
Rust語言沒有緩衝區重讀問題。緩衝區重寫是一種情況,當從緩衝區讀取數據並且程序超出緩衝區時,即它讀取相鄰的存儲器。 這導致違反內存安全。
下面來看一個簡單的例子:
fn main()
{
let v = vec![20,30,40];
print!("element of a vector is :",v[5]);
}
執行上面示例代碼,得到以下結果 -
在上面的例子中,試圖訪問索引5
所在的第六個元素。在這種情況下,Rust會因爲訪問無效索引而引發panic
。 因此,Rust不會返回任何內容。
但是,對於其他語言(如C和C++),它們會返回一些內容,儘管該向量不屬於該內存。 這稱爲緩衝區重寫,它會導致安全問題。
Rust回溯
Rust回溯是調用的所有函數的列表,用於瞭解「導致錯誤的原因」。 需要設置RUST_BACKTRACE
環境變量來獲取回溯。