本系列录制的视频主要放在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!