在 2025 收官前,看清 Data + AI 的真实走向,点击查看 BUILD 大会精华版 了解详情
写点什么

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

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

关注

评论

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

IDEA开发Spark应用实战(Scala)

程序员欣宸

8月月更

【Go事】一眼看穿 Go 的集合和切片

梦想橡皮擦

Python 爬虫 8月月更

基于STM32+ESP8266设计物联网产品(重点支持微信小程序一键配网连接腾讯云平台)

DS小龙哥

8月月更

架构设计小结

Geek_e8bfe4

SpringBoot(二、基础知识)

SpringBoot 2 8月月更

IT运维如何助力企业数字化转型

阿泽🧸

数字化转型 8月月更

架构师的十八般武艺:高可用

agnostic

容灾

架构实战营模块 9 作业

Naoki

架构实战营

数据结构——树(树的基本概念)

工程师日月

8月月更

高绩效研发团队领导者的视野和格局

编程启航栈

毕业总结

Geek_2ce415

Bigdata 大数据训练营毕业总结

Pyel

Struts2应用详解

No Silver Bullet

应用 Struts2 8月月更

Java基础之网络编程(一)

自然

网络 8月月更

[CSS入门到进阶] 用transform后z-index失效了?总结transform的注意事项!

HullQin

CSS JavaScript html 前端 8月月更

架构实战营毕业总结

Naoki

架构实战营

来聊聊 OpenJDK 和 JVM 虚拟机

HoneyMoose

Spring 全家桶之 Spring Data JPA(五)

小白

8月月更

秒杀系统设计demo

Geek_e8bfe4

用户权限-Linux系统特殊权限

Albert Edison

Linux centos 运维 用户权限 8月月更

解密 Flutter 的 const 关键字

岛上码农

flutter ios 前端 安卓开发 8月月更

Prototype以及jQuery和CDN -内容分发网络在使用JavaScript实战运用

恒山其若陋兮

8月月更

模块九毕业设计

Geek_2ce415

IPv6过渡技术部署策略与建议

穿过生命散发芬芳

ipv6 8月月更

Java基础之网络编程(二)

自然

网络 8月月更

用RocketMQ这么久,才知道消息可以这样玩

牧小农

RocketMQ

如何安全地移动WSL 2 到另一个驱动器

吴脑的键客

windows WSL2

RT-Thread记录(十、全面认识 RT-Thread I/O 设备模型)

矜辰所致

单片机I/O设备的控制方式 RT-Thread 8月月更 设备模型

Bigdata 毕业设计

Pyel

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