写点什么

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:001766
用户头像

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

关注

评论

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

儿童节,和 AI 一起通关 “超级马里奥兄弟”

华为云开发者联盟

换个角度带你学C语言的基本数据类型

华为云开发者联盟

开发 C语言 数据类型位数

常遇到读多写少,教你用ReadWriteLock实现一个通用的缓存中心

华为云开发者联盟

缓存 高并发 开发 ReadWriteLock

天猫精灵的自定义语音技能创建流程

汪子熙

人工智能 机器学习 机器人 机器人流程自动化 6月月更

leetcode 547. Number of Provinces 省份数量(中等)

okokabcd

LeetCode 搜索

ObserverPattern-观察者模式

梁歪歪 ♚

设计模式

InfoQ 极客传媒 15 周年庆征文|深入理解 ELK 中 Logstash 的底层原理 + 填坑指南

悟空聊架构

运维 Logstash ELK 6月月更 InfoQ极客传媒15周年庆

科技成就伟大游戏 | 2022 亚马逊云科技游戏开发者大会

亚马逊云科技 (Amazon Web Services)

开发者 亚马逊云

ConcurrentLinkedQueue

急需上岸的小谢

6月月更

【愚公系列】2022年06月 二十三种设计模式(十九)-观察者模式(Observer Pattern)

愚公搬代码

6月月更

磁盘I/O性能测试工具

穿过生命散发芬芳

6月月更 磁盘测试工具

2022 核心服务动手训练营

亚马逊云科技 (Amazon Web Services)

Amazon 亚马逊云

在线数字转成人民币大写

入门小站

工具

在线HTML转PERL工具

入门小站

工具

彰显个性│博客园的自定义主题

主题 可视化看板 6月月更

那些年,我们在Apache SeaTunnel 2.1.0部署中踩过的坑【含源码分析】

Apache SeaTunnel

Apache 大数据 开源 workflow Seatunnel

字节跳动一站式数据治理解决方案及平台架构

字节跳动数据平台

数据治理 元数据

深入剖析 | HeartBeat方案的标准设计

九叔(高翔龙)

架构 dubbo 源码解析 HeartBeat 心跳设计

MixNet解析以及pytorch源码

AI浩

人工智能 6月月更

linux之同时监控多个日志文件变化

入门小站

Linux

特别的儿童节,OceanBase 送上一份特别的惊喜

OceanBase 数据库

oceanbase

应用实践|Lifewit 数据平台基于Apache Doris的建设实践

SelectDB

数据库 数据仓库 apache doris SelectDB

对话ACE第三期:数据库技术生态应如何构建

OceanBase 数据库

oceanbase

云图说丨应用宕机怎么办?MAS帮您实现业务无缝切换

华为云开发者联盟

云计算 MAS 宕机 多云高可用服务

安势信息加入Linux基金会OpenChain项目,助力软件供应链安全

安势信息

Linux 开源 DevSecOps SCA 开源软件

对不起,我错了,这代码不好写

捉虫大师

Java Go sentinel 6月月更

TemplateMethodPattern-模板方法模式

梁歪歪 ♚

设计模式

StrategyPattern-策略模式

梁歪歪 ♚

设计模式

水果FL Studio最新20.9中文破解版下载

茶色酒

水果FL Studio

Agora Web UIKit:快速构建视频通话或直播

devpoint

React 直播技术 视频通话

MSVC编译动态库

Loken

音视频 5月月更

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