10 月 23 - 25 日,QCon 上海站即将召开,现在购票,享9折优惠 了解详情
写点什么

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

  • 2016-06-15
  • 本文字数:742 字

    阅读完需:约 2 分钟

最近发布的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-06-15 19:001862
用户头像

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

关注

评论

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

智慧停车场-车牌识别自动计费系统

DS小龙哥

车牌识别 3月月更

阿里巴巴发布最佳实践 | 阿里巴巴DevOps实践指南

阿里云云效

云计算 阿里云 DevOps 云原生 迭代管理

Qunar【业务架构解析与探索】系列课重磅来袭啦!!

Qunar技术沙龙

架构

Nginx反向代理(一)

神农写代码

AQS 源码流程分析

网易云信

java

PendingIntent重定向:一种针对安卓系统和流行App的通用提权方法——BlackHat EU 2021议题详解(上)

安第斯智能云

安全 安卓

浏览器中的页面

Tristan

LabVIEW设计自定义指示灯和按钮控件

不脱发的程序猿

LabVIEW 自定义控件方法

To程序员:要写出好代码,你需要懂点儿“底层思维”

博文视点Broadview

微博系统中”微博评论“的高性能高可用计算架构

孙强

架构师实战营

Python 中的函数式编程三大法宝:map、filter、reduce

踏雪痕

Python map reduce 3月程序媛福利 3月月更

StarRocks 2.1 新版本特性介绍

StarRocks

数据库 大数据 StarRocks

Redis集群架构剖析(1):认识cluster

非晓为骁

redis redis cluster 分布式,

什么是 RabbitMQ

Ayue、

RabbitMQ 3月月更

免费下载 |《Serverless 开发速查手册》让你速查秒懂 Serverless

阿里巴巴云原生

云原生

Nginx反向代理(三)

神农写代码

遵循Promises/A+规范,手把手带你实现Promise源码(核心篇)

战场小包

JavaScript 前端 Promise 3月月更

Java基础重要面试题(一)

逆锋起笔

java面试 java基础 3月月更

基于微信小程序的驾校预约学车平台的概要设计和详细设计

CC同学

干货|一次完整的性能测试,测试人员需要做什么?

云智慧AIOps社区

测试 性能测试 测试 单元测试 测试类型 测试管理

WPF 与 Winform 的区别以及应用场景

神农写代码

基于迁移学习的非侵入式负荷识别

白日梦

我们不太可能一直存在着失控的人生,我们要做的是,让拥有自控力的时间长一点,让失控的日子短一点。

叶小鍵

Web 键盘输入法应用开发指南 (8) —— 模拟事件

天择

JavaScript 键盘 输入法 3月月更

Nginx 反向代理(二)

神农写代码

Linux下玩转nginx系列(三)---nginx日志配置文件说明

anyRTC开发者

nginx Linux 音视频 WebRTC 服务器

大数据培训:HiveSQL技术优化与面试

@零度

Hive SQL 大数据开发

CRM复杂业务场景的低代码开发实践

鲸品堂

低代码

硬件工程师实用工具网站

不脱发的程序猿

嵌入式 智能硬件 电路设计 硬件工程师 实用工具网站

面试突击30:线程池是如何执行的?拒绝策略有哪些?

王磊

java面试

22.04 LTS爆料现场 - UKUI 3.1实操界面曝光,简约却不简单!

优麒麟

Linux 开源 操作系统 优麒麟 UKUI

Rust 1.9改善了错误处理机制并提升了编译性能_语言 & 开发_Sergio De Simone_InfoQ精选文章