020 Rust死灵书之展开

本系列录制的视频主要放在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!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值