写点什么

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

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

关注

评论

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

技术型创业公司如何把握发展与管理的节奏感?

石云升

极客时间 1月月更 技术领导力实战笔记

网易伏羲预训练模型”玉言“登顶CLUE分类榜单,成绩首次超过人类水平

网易伏羲

人工智能

小场景解决大问题|明道云在京东方的落地实践

明道云

MySQL性能优化浅析及线上案例

京东科技开发者

MySQL 性能优化 索引性能 数据库· 企业号 1 月 PK 榜

一个 go-sql-driver 的离奇 bug

SOFAStack

位运算在数据库中的实际应用

领创集团Advance Intelligence Group

数据库 位计算

KubeVela 再升级:交付管理一体化的云原生应用平台

阿里巴巴云原生

阿里云 开源 云原生 KubeVela

OpenHarmony如何切换横竖屏?

OpenHarmony开发者

OpenHarmony

Databend v0.9.0 版本发布

Databend

企业内部沟通,即时通讯软件要怎么选?

BeeWorks

【提升团队运营效率】交易履约之订单中心实践

京东科技开发者

平台搭建 平台赋能 数智创新 效能提升 企业号 1 月 PK 榜

21世纪啤酒与尿布的故事

Marvin Ma

广告 流媒体 啤酒与尿布

阿里云云边一体容器架构创新论文被云计算顶会 ACM SoCC 录用

阿里巴巴云原生

阿里云 容器 云原生

如何利用极狐GitLab 轻松管理NPM依赖发布与更新?

极狐GitLab

node.js DevOps npm 依赖 极狐GitLab

Kyligence 成功签约阿斯利康,助力提升商业洞察质量和决策效率

Kyligence

数据分析 指标中台

CuPL 利用大规模的语言模型,更高效地生成提示

Zilliz

maven pom 中有用的两个配置

JefferLiu

IoTDB 可实现的基本操作 : 数据导入、基本查询、聚合查询 | 小白教程文档(三)

Apache IoTDB

国产时序数据库

Appuploader内测版本详解

雪奈椰子

iOS上架 ios打包

玖章算术CEO叶正盛:程序员必须掌握的数据库原理

NineData

数据库 程序员 开发 dba 数据库技术

被面试官问住了,MySQL两阶段提交是什么鬼?

程序员拾山

MySQL 面试

WorkPlus移动办公平台,助力企业随时随地“指尖办公”

BeeWorks

北邮一号卫星搭载 IoTDB 成功发射!高效轻量数据管理,助力航天观测分析

Apache IoTDB

数据库 时序数据库 国产数据库

服务网格领域的百花齐放,是否存在一个更优解?

API7.ai 技术团队

Service Mesh 服务网格 APISIX

一次偶然机会发现的MySQL“负优化”

骑牛上青山

MySQL 数据库 索引

安卓影像飞升时刻:vivo X90 Pro+打通HDR任督二脉

脑极体

Vivo 蔡司影像

IoTDB 可实现的基本操作 —— 数据写入、删除、导出、元数据管理、时区设置 | 小白教程文档(四)

Apache IoTDB

时序数据库 国产数据库

特定领域知识图谱(DKG)融合方案:技术知识前置【一】-文本匹配算法、知识融合学术界方案、知识融合业界落地方案、算法测评KG生产质量保障

汀丶人工智能

自然语言处理 知识图谱 实体对齐

Cloud Kernel SIG月度动态:建立社区第三方驱动研发流程、发布ANCK 4.19-027版本 | 龙蜥 SIG

OpenAnolis小助手

内核 龙蜥社区 sig 版本发布 anck

适配 Laravel 多版本的开源项目版本号规划

ModStart

利用 IoTDB 替换 Druid.io 服务太极股份电厂、军工制造类项目,采集精度达纳秒级

Apache IoTDB

时序数据库 国产数据库

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