你在使用哪种编程语言?快来投票,亲手选出你心目中的编程语言之王 了解详情
写点什么

Rust 1.9 改善了错误处理机制并提升了编译性能

2016 年 6 月 15 日

最近发布的Rust 1.9 增加了一个新的异常处理API,让开发者在处理跨线程异常传播的时候能够增加更多的控制。此外新版本还提升了变量判等时的编译性能。

正如前面所提到的, std::panic增加了一个新的catch_unwindAPI,Rust 使用它来处理异常,同时允许开发者更好地控制由异常触发的堆栈展开过程。Rust 在这种场景下的哲学是“快速失败”,也就是在展开堆栈之后停止唤起的线程,但是其他线程不受影响,可以继续运行,直到它们试图与出错的线程通信为止,只有当需要与出错的线程通信时才需要做一些恢复工作。通过使用catch_unwind,开发者能够捕获 panic 并将其转换成失败线程中的普通错误:

复制代码
let result = panic::catch_unwind(|| {
panic!("oh no!");
});
assert!(result.is_err());

该功能在下面两种场景中非常有用:

  • 将 Rust 嵌入其他语言的时候。在这种情况下 unwinding 很有可能会在语言边界处产生分割故障。
  • 当创建类库来管理线程的时候。在这种情况下,最好是将错误通知到客户端而不是停止失败的线程。

值得注意的是,堆栈展开目前是 Rust 处理 panic 的唯一策略,但是未来这种情况会改变。确实,通过一种新的“终止”策略从而避免堆栈展开的成本可能更可取。

新的Rust 版本还提升了两个变量判等时的编译性能。 PR 的提交者 Markus Westerlind 声称在某些情况下提升非常明显,复杂性从 O(n!) 降低到了 O(n)。正如 Westerlind 在 Reddit 上所解释的,尽管 n 通常都非常小,但是代码中细微的差别都有可能使得 n 膨胀。在这些场景下,恰如 Westerlind 的 combine 库所展示的,Rust1.9 在性能上有极大的提升。

此外,Rust1.9 还提升了许多库函数的稳定性,包括网络、编码以及指针处理函数。

如果你想了解更多信息可以查看 Rust1.9 的官方声明

查看英文原文 Rust 1.9 Improves Error Handling and Compile Time

2016 年 6 月 15 日 19:001021
用户头像

发布了 321 篇内容, 共 104.9 次阅读, 收获喜欢 8 次。

关注

评论

发布
暂无评论
发现更多内容

Vue进阶(幺玖肆):localStorage应用总结

华强

Vue LocalStorage 七月日更

innodb_ruby 项目简介

keaper

MySQL 数据库 后端 服务端 innodb

基于迁移学习的语义分割算法分享与代码复现

华为云开发者社区

语义分割 modelarts 迁移学习 语义分割算法 迁移分割

华为云UGO正式公测:4大核心优势破解异构数据库迁移难题

华为云开发者社区

数据库 华为云数据库 异构数据库 对象迁移 应用迁移

智能化分析样本,多维数据分析,便捷考评系统——快考题!

Geek_6d9bcc

【求转发】郑州加油!

IT蜗壳-Tango

7 月日更 郑州加油

【架构训练营】模块二作业

zclau

【Flutter 专题】80 初识 Flutter Stream (一)

阿策小和尚

Flutter 小菜 0 基础学习 Flutter Android 小菜鸟 7 月日更

大数据实战训练营作业二

Clarke

使用dubbo-go搭建dubbo接口测试平台

捉虫大师

golang dubbo 接口测试 dubbo-go

FIL币价跌入谷底,什么时候会涨,IPFS的出路又在哪里?

IPFS8822

智慧城市 FIL币价格行情如何 通信运营商 币圈 ipfs矿机

认证总结 NCRE二级和三级

万里无云万里天

NCRE 考试经验

云小课|ModelArts Pro 视觉套件:零代码构建视觉AI应用

华为云开发者社区

零代码 ModelArts Pro 行业落地 视觉套件 AI应用

Rust从0到1-面向对象编程-概念

rust oop 面向对象编程

【LeetCode】两个链表的第一个公共节点Java题解

HQ数字卡

算法 LeetCode 7月日更

智慧安防社区系统开发,智慧平安小区综合管理平台建设

WX13823153201

面向资源的架构(ROA)概述

信码由缰

SOA ROA

Python OpenCV 图像的几何变换,先说不平凡的 resize 函数

梦想橡皮擦

Python 7月日更

“吴痛针灸”代言人翻车,为什么女性会重新定义品牌优势

脑极体

Go语言,什么情况下应该使用指针?

微客鸟窝

golang Go 语言

MERN堆栈

DisonTangor

node.js mongodb React Express

大数据实战训练营作业一

Clarke

手把手教你在Modelarts平台上进行视频推理

华为云开发者社区

视频 modelarts 推理 预处理 视频推理

并发量很大?腾讯T4手撸的并发手册真的有这么火吗

架构大师

Java 程序员 高并发 java编程 Java学习

Vue进阶(三十五):watch监听函数详解

华强

Vue 七月日更 watch

多方位统计错误率,员工培训管理系统,快考题评估操作简单!

Geek_6d9bcc

Redis 的集群容错与故障转移

U+2647

redis redis哨兵模式 集群 redis cluster Leader

浪潮云洲×天人集团:打通数据脉络 驱动降本增效

浪潮云

现代企业架构师的5大特征及六种方法

禅道项目管理

架构 数据 开发 创新 行业趋势

使用Docker运行OnlyOffice的Node.js示例

一个需求

onlyoffice

​量化策略交易系统开发源码,马丁策略交易平台搭建app

WX13823153201

云原生场景下企业API 网关选型及落地实践

云原生场景下企业API 网关选型及落地实践

Rust 1.9改善了错误处理机制并提升了编译性能-InfoQ