阿里、蚂蚁、晟腾、中科加禾精彩分享 AI 基础设施洞见,现购票可享受 9 折优惠 |AICon 了解详情
写点什么

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

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

关注

评论

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

tcp/ip协议栈——epoll的内部实现原理

Linux服务器开发

后端 TCP/IP epoll 网络协议栈 服务器开发

Python进阶——什么是上下文管理器?

Kaito

Python

Redis面试受阻?阿里P8架构师整理出的核心笔记+实战+面试题+脑图送你

比伯

Java 编程 程序员 面试 计算机

如何应对Spark-Redis行海量数据插入、查询作业时碰到的问题

华为云开发者联盟

数据库 redis spark 开源 数据

五周 - 总结

水浴清风

多线程源码明白了吗?不明白的话来看腾讯大牛给你画的面试重点

小Q

Java 学习 架构 面试 线程

架构师训练营第十周课后作业

Gosling

极客大学架构师训练营

美团Java面试一轮游,太激烈了,问啥啥不会,我该怎么办?

比伯

Java 编程 架构 面试 计算机

白皮书丨关于工业互联网,你想知道的都在这儿

华为云开发者联盟

工业互联网 华为云 白皮书 ICT 智能

讲真,你知道Python咋来的吗?

华为云开发者联盟

Java Python 编程语言 C语言 代码

iOS 项目避坑:多个分类中方法重复实现检测

iOSer

ios 项目管理 编程语言 iOS Document

架构师训练营第 1 期 - 第十周作业

Todd-Lee

极客大学架构师训练营

Linux IO模式及 select、poll、epoll详解(含部分实例源码)

linux大本营

c++ Linux 后台开发 异步IO epoll

C语言常用错误代码释义大全,让你编译运行报错不是烦恼

ShenDu_Linux

编译原理 常见错误

深入浅出Spark

大数志

大数据 spark 数据科学

区块链技术赋能信息通信行业信用监管

CECBC

区块链 信用

《具有算法和程序的离散数学基础》PDF免费下载

计算机与AI

算法 离散数学

Week 10 作业

黄立

年轻人,学好Nginx,走遍天下都不怕

程序员小灰

c++ nginx Linux 服务器 架构师

WSL2:我在原生的Win10玩转Linux系统

梁桂钊

阿里要求其内部程序员必须精通的并发编程笔记:原理+模式+应用

Java架构追梦

阿里巴巴 编程 面试 并发 java架构

食堂就餐卡系统UML设计

简简单单

一张图彻底理解Spring如何解决循环依赖!!

冰河

spring aop ioc 源码解析 循环依赖

go-zero 如何扛住流量冲击(二)

万俊峰Kevin

microservice Go 语言

架构师训练营第 1 期 - 第十周总结

Todd-Lee

极客大学架构师训练营

区块链创新中国价值链

CECBC

区块链

架构师训练营第 10 周作业

netspecial

极客大学架构师训练营

数仓搬迁:从方法到实践,带你解决数据一致性对比

华为云开发者联盟

数据仓库 数据 存储 数据校验 搬迁

和同事交流不会kafka怎么行,API奉上,不是大神也能编

小Q

Java 学习 架构 面试

让“数字鸿沟”变为“数字通途”

CECBC

数字化时代 支付产品

架构师训练营3期第一周学习总结

简简单单

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