写点什么

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

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

关注

评论

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

DeSci 启蒙:从文艺复兴到 Web3.0 的科研革命梦想

区块链软件开发推广运营

交易所开发 dapp开发 链游开发 公链开发 代币开发

电力数据驱动的节能创新:TDengine Cloud 在智慧楼宇中的深度应用

TDengine

数据库 tdengine 时序数据库

重塑用户体验!快手电商智能巡检平台的实践与探索

快手技术

前端

模型输出可保存为数据集、支持配置社区活动作为课程作业|ModelWhale 版本更新

ModelWhale

Python 人工智能 数据分析 元数据

MPC2024明道云伙伴大会圆满结束

明道云

Elasticearch索引mapping写入、查看、修改

京东科技开发者

MacCleaner Pro for Mac(系统综合清理软件)v3.3.5永久激活版

小玖_苹果Mac软件

夜莺短信告警教程

巴辉特

夜莺监控 夜莺Nightingale 夜莺短信告警

NTFS Disk by Omi NTFS for mac(NTFS 磁盘管理器)v1.1.4中文版

小玖_苹果Mac软件

Set A Light 3D Studio for Mac(3D摄影棚布光工具)v2.58d永久试用版

小玖_苹果Mac软件

解锁电商数据宝藏:淘宝天猫API接口深度探索——商品评论与描述详情图获取指南

代码忍者

API 接口 pinduoduo API

Web端软件测试工具

测试人

软件测试

大促系统优化之应用启动速度优化实践

京东零售技术

后端 大促

聚焦实践,面向前端|12月7日华为云首届开源开发者论坛火热报名中~

OpenTiny社区

开源 前端 低代码 组件库 OpenTiny

TextIn文档解析表格处理模型优化,显著提升表格解析性能

合合技术团队

人工智能 表格 AIGC 文档图像

项目经理如何向客户更好地汇报项目情况

Hi-CodeCaptain

项目管理 软件测试 精准测试 代码覆盖率 质量内建

用例图如何在线制作?10个用例图模板案例推荐!

职场工具箱

效率工具 UML 用例图 在线白板 绘图软件

Tower for Mac(强大的Git客户端)v12.3注册激活版

小玖_苹果Mac软件

俄罗斯通过加密货币税法:重新定义数字货币规则

区块链软件开发推广运营

交易所开发 dapp开发 链游开发 公链开发 链游开发代币开发

Kubernetes为什么要从docker切换ContainerD

虚实的星空

Docker Containerd

明道云正式发布国际品牌Nocoly

明道云

ERP系统实施的难点不是系统本身,而是企业的人与管理

积木链小链

企业管理 ERP 中小企业

TDengine vs InfluxDB:谁的“流式计算”功能是真的?

TDengine

数据库 tdengine 时序数据库

TDengine 签约深圳综合粒子,赋能粒子研究新突破

TDengine

数据库 tdengine 时序数据库

Pioneer DJ rekordbox for Mac(专业的DJ音乐管理软件) v5.8.6.0004激活版

小玖_苹果Mac软件

InfluxDB vs TDengine :2025 年了,谁家用的数据库还不能高效读缓存?

TDengine

数据库 tdengine 时序数据库

Serial for Mac(全功能串行终端管理软件)v2.0.17激活版

小玖_苹果Mac软件

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