Rust:Structuring and handling errors in 2020学习笔记
Rust: Structuring and handling errors in 2020- 学习笔记
直接上菜, 首先介绍两个新的Crate用于Rust Error处理,anyhow 和thiserror, 其代表Rust Error处理的最新探索成果! anyhow面向Application应用程序开发, thiserror面向Library开发, 为什么一个Rust Error处理需要分成两个Crate来处理呢?!
理由如下:
(1) 库应专注于生成有意义的结构化错误类型/变体。这允许应用程序轻松区分各种错误情况。
(2) 应用程序主要消化错误。
(3) 库需要将错误从一种类型转换为另一种类型。比如:将底层IO错误封装进本库提供的高级错误,这样调用者才能区分此底层IO错误具体来自于那个库。
(4) 库在更改错误或创建新错误时必须小心,因为这些错误很容易为调用者引入破坏性更改。所以要求库可以更容易地更改和新建错误,同时尽可能避免祸及调用者。
(5) 库返回错误,而应用程序需要决定这些错误是否格式化以及如何显示给人。
(6) 应用程序可能还希望分析和检查错误,例如将错误转发到异常跟踪系统,或者在认为安全时重试操作。
(7) 库的
pub API
应该始终使用std::Result和自定义Error 类型(并且它impl了std::error::Error Trait) ,而failure::Fail这类Rust Error处理Crate没有能与Rust原生的Error处理很好地融合, 独自创造了一套,也难以很好的和用户代码相融合, 增加了用户学习负担。总结: 基于以上理由, 将错误处理分为两个crate就非常必要了!同时提炼出优质Rust Error处理crate的特性: A. 可以与Rust原生Error处理很好融合。B. 可以与用户代码很好地融合,最好是不漏踪迹,不污染用户代码。 C. 极大地降低学习和使用负担,最好零负担。 D. 非常容易更改和新建错误,不会导致调用者破坏性修改代码。 E. 可以backtrace, 清晰表达错误类型、源头和传播路径。 F. 可以给每个错误以人性化的可读信息。G. 灵活有效的错误分析、检查、转发、重试机制。
【详细内容请看】:
https://nick.groenen.me/posts/rust-error-handling/
参照原文,我整理调试出两个代码例子,
thiserror_t 和anyhow_t
, 放到了https://github.com/yujinliang/rust_learn/tree/master/rust_my_error
, 有兴趣可以看看。
Author
RUST学习随笔,如有谬误,尽请指正,谢谢。
作者:心尘了
email: 285779289@qq.com
Reference:
https://nick.groenen.me/posts/rust-error-handling/
https://doc.rust-lang.org/cargo/reference/specifying-dependencies.html
https://mozillazg.com/2017/10/rust-cargo-use-local-crate-package.html
https://doc.rust-lang.org/rust-by-example/cargo/deps.html
`《深入浅出Rust》 范长春著 机械工业出版社`
Rust:Structuring and handling errors in 2020学习笔记相关推荐
- Altium Designer 2020 学习笔记(一)-----原理图及原理图库部分(配动态图操作演示)
本篇文章主要与大家简要分享一下,我在AD学习过程中的一些学习笔记,本篇文章主要关于原理图及原理图库部分. 本系列文章链接: -------------------------------------- ...
- 2020年Yann Lecun深度学习笔记(下)
2020年Yann Lecun深度学习笔记(下)
- 2020年Yann Lecun深度学习笔记(上)
2020年Yann Lecun深度学习笔记(上)
- Yann Lecun纽约大学《深度学习》2020课程笔记中文版,干货满满!
关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! [导读]Yann Lecun在纽约大学开设的2020春季<深度学习>课 ...
- 2020年高等数学方法与提高(上海理工大学)学习笔记汇总
写在前面: [1] 本系列文章涉及内容已与授课教师联系,已获得许可.如有不妥之处,请联系博主740925018@qq.com. [2] 对授课教师表示衷心感谢.贾老师的高等数学方法与提高.数学分析等课 ...
- Handling Errors Exceptionally Well in C++ 在C++中良好地捕获意外的错误
Handling Errors Exceptionally Well in C++ 在C++中良好地捕获意外的错误 from:http://www.cprogramming.com/tutorial/ ...
- 工程伦理第三章学习笔记2020最新
工程伦理第三章学习笔记2020最新 因为之前自己在网上找答案总是觉得费劲,一道一道的找,很慢,突然找到了前两章的答案,感觉有一种前人种树后人乘凉的感觉,于是自己在艰难找完第三章习题并全对的情况下,将题 ...
- FPGA 学习笔记:Vivado 2020.2 MicroBlaze MIG 测试 DDR3 篇尾
FPGA 学习笔记:Vivado 2020.2 MicroBlaze MIG 测试 DDR3 篇一 FPGA 学习笔记:Vivado 2020.2 MicroBlaze MIG 测试 DDR3 篇二 ...
- PYTHON学习笔记之(一)2020.08
PYTHON学习笔记之(一)2020.08 Python基础 数据类型 常见的列表.字典,以及元组.集合. 1 列表 list 1.1 列表转换字符串 stu = ['王一', '李二', '张三'] ...
最新文章
- git通过authorized_keys来管理用户的权限(二)
- 深度优先搜索(DFS)相关习题
- pythonweb开发需要学哪些知识,python web需要了解哪些
- Ubuntu12.04 LTS 忘记登录密码的解决方法
- 第二轮冲次会议第六次
- mysql免安装出现1067_mysql,免安装,1067错误
- Commons net实现 FTP上传下载
- android 测试 mock,Mock在Android TDD中的使用
- mysql 分区 扩充_mysql分区LVM扩容
- 萌新的Python练习菜鸟100例(十六)输出指定格式的日期。
- 利用ros3d.js实现 turtlebot3 在web 端显示并导航
- 阿里云 部署并开启nodejs应用
- Pytorch模型构造方法
- java sqlite 密码保护_密码保护SQLite数据库 . 可能吗?
- 性能测试常用的linux命令
- 勒索软件的激荡三十年
- 手机版qq邮箱一直连接服务器失败,手机qq邮箱网页版无法登录 求高手 QQ邮箱登不上去 显示找不到服务器15?请问我咋用不...
- 既有禀赋上的自然延展:中国移动咪咕进军元宇宙的底层逻辑
- Linux 重定向和追加(、 指令)
- 盛迈坤电商:拼多多推广数据多久会显示
热门文章
- K210识别数字(0~9)并与单片机通信通过数字来控制小车移动
- weblogic BEA-170011
- Tableau 八、数据分层、数据分组、数据集
- 京东再次偷袭在线旅游
- 小车运料c语言编程,西门子PLC编程实例及技巧(运料小车控制系统)
- nested exception is org.apache.ibatis.builder.BuilderException: Error evaluating expression 的解决办法
- P528 List接口常用实现类的对比及源码分析
- O - 鸣人和佐助(BFS)
- python通过Tkinter库实现的一个简单的文本编辑器源码
- Anchor-free系列——FoveaBox: Beyond Anchor-based Object Detector