本系列录制的视频主要放在B站上​​Rust死灵书学习视频​

Rust 死灵书相关的源码资料在https://github.com/anonymousGiga/Rustonomicon-Source

Rust分层的错误处理体系

  • 有些值可以为空,则使用Option;
  • 如果发生了错误,而错误可以被正常处理,用Result;
  • 如果发生了错误,但是没办法正常处理,就让线程Panic;
  • 如果发生了更严重的问题,则终止(abort)程序。

在Rust中,Panic只能被任务的所有者捕获,而捕获后必须立即对它进行相应处理,否则任务会自己停止。

  • 捕获panic:catch_panic可以在不启动一个线程的情况下捕获panic,示例如下:
use std::panic;

fn main() {
let result = panic::catch_unwind(|| {
println!("hello!");
});
assert!(result.is_ok());
let result = panic::catch_unwind(|| {
panic!("oh no!");
});
assert!(result.is_err());

println!("Hello, world!");
}
  • Rust的展开方式没有试图和其它语言的展开方式兼容,因此,从其它语言展开Rust的栈或者从Rust展开其它语言的栈,属于未定义行为。所以必须在进入FFI之前捕获所有的Panic!