NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

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

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

关注

评论

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

了不起的 TypeScript 入门教程 [1.2 w字]

阿宝哥

Java typescript 大前端 Web

ARTS 第五周 6.21-6.28

我笔盒呢

ARTS - Week 4

Khirye

ARTS 打卡计划 arts

玩转Java8中的 Stream 之从零认识 Stream

Java小咖秀

学习 面试 stream java8 经验

架构师训练营第四周作业

张明森

那些会阻碍程序员成长的细节[3]

MavenTalker

程序员 职业规划 职业成长

MySQL实战45讲笔记(1)

程序员老王

msyql

MySQL系列 - SQL查询与修改执行过程

俊俊哥

MySQL 性能优化 关系型数据库 存储

限频/限流的一些思考

i风语

Java redis 微服务 sentinel ratelimiter

架构师训练营第四周学习总结

张明森

从0开始设计Flutter独立APP | 第二篇: 完整的国际化语言支持

渔子长

flutter 大前端

创新管理体系标准ISO56002介绍

涛哥 数字产品和业务架构

数字化转型 创新

【写作群星榜】6.20~6.26 写作平台优秀作者 & 文章排名

InfoQ写作社区官方

写作平台 排行榜 热门活动

对直播带货的一点思考

Neco.W

直播 直播带货

来了!8M/S+速度,Pdown复活!

程序员生活志

区块链≠分布式账本,别再傻傻分不清

CECBC

区块链技术 高考 信息防篡改

软件架构语录

烟雨濛濛

重学 Java 设计模式:实战中介者模式「按照Mybatis原理手写ORM框架,给JDBC方式操作数据库增加中介者场景」

小傅哥

设计模式 小傅哥 代码优化 代码规范 中介者模式

为什么建议你使用枚举?

王磊

Java 枚举

揭秘!中国人一定要知道的北斗卫星系统

程序那些事

北斗卫星 北斗系统 卫星定位 卫星授时 黑科技

深入浅出kubernetes之WorkQueue详解

博文视点Broadview

Kubernetes 源码分析 k8s 队列 延迟队列

架构师训练营第四周作业

烟雨濛濛

势能造就下的互联网大厂程序员为什么去开滴滴了?

非著名程序员

程序员 程序人生 提升认知

IM聊天教程:发送图片/视频/语音/表情

GoEasy消息推送

websocket 即时通讯 聊天室 聊天

Dart vs Swift

柠檬水

swift dart

融云年中大促钜惠来袭 IM+RTC 超值套餐最低6折起

Geek_116789

iOS 动画 - 窗景篇(三·完结)

柯烂

ios swift 动画 移动互联网 动效

一群龙舟划手 “拍了拍” 你:端午节安康~

博睿数据

海阅优品致力打造新零售蓝海

Geek_116789

告别静默式看房 融云音视频助力上海中原 App 上线 VR 带看服务

Geek_116789

一二线城市知名 IT 互联网公司名单(新版)

程序员生活志

互联网 IT 大厂

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