020 Rust死灵书之展开

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

Rust 死灵书相关的源码资料在github.com/anonymousGiga/Rustonomi...

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!
本作品采用《CC 协议》,转载必须注明作者和本文链接
令狐一冲
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!