50万奖金+官方证书,深圳国际金融科技大赛正式启动,点击报名 了解详情
写点什么

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

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

关注

评论

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

ARTS - Week Two

shepherd

js algorithm

情绪的力量:如何使用情绪来达成目标

董一凡

情绪

一个人,沿着童年的路究竟可以走多远?

zhoo299

童年 NASA 航天

原创 | 使用JUnit、AssertJ和Mockito编写单元测试和实践TDD (十三)编写测试-生命周期方法

编程道与术

Java 编程 TDD 单元测试 JUnit

Redis持久化了解一波!

不才陈某

redis 程序员 后端

我的 Windows 利器

玄兴梦影

工具 Win

线程池续:你必须要知道的线程池submit()实现原理之FutureTask!

一枝花算不算浪漫

源码分析 并发编程

我常用的浏览器插件

彭宏豪95

chrome 效率工具 浏览器 插件

奈学:传授“带权重的负载均衡实现算法”独家设计思路

奈学教育

分布式

互联网时代的界限管理

非著名程序员

程序员 职场 提升认知 界限管理

Go语言分布式系统配置治理

田晓亮

微服务

Python 自动化办公之"你还在手动操作“文件”或“文件夹”吗?"

JackTian

Python 自动化

这是一个测试文档

Geek_073cad

patroni 通过服务启动报错

hobson

数据库 高可用 AntDB

Vue生态篇(一)

shirley

Java Vue

MySQL的各种日志

超超不会飞

MySQL

ARTS 第二周打卡

陈文昕

Vue生态篇(二)

shirley

Vue

从 0 到 1 搭建技术中台之发布系统实践:集泳道、灰度、四端和多区域于一体的设计与权衡

伴鱼技术团队

架构 系统设计 系统架构 系统性思考 架构设计

我为什么开始技术写作?

架构精进之路

技术创作

【Java 25周年有奖征文获奖名单公布!!!】关于Java,你最想赞扬、吐槽、期待的变化是什么?

InfoQ写作社区官方

写作平台 Java25周年 热门活动

杂谈-JSONP探索

卡尔

Java jsonp

数据产品经理实战-数据门户搭建(上)

第519区

数据中台 开发数据

美团可能会强势涉足 ToB

罗小布

创业 互联网巨头 深度思考 互联网

每个人都是领导者的工程团队

hongfei

工程能力 项目实践

# LeetCode 863. All Nodes Distance K in Binary Tree

liu_liu

算法 LeetCode

程序员修炼的务实哲学

博文视点Broadview

程序员 软件 编程思维 工程师 编程之路

知识也会生宝宝?

史方远

个人成长 随笔杂谈

# LeetCode 215. Kth Largest Element in an Array

liu_liu

算法 LeetCode

你不知道的SSD那些事

焱融科技

分布式 存储 SSD nvme

开源分布式文件系统大检阅

焱融科技

开源 sds 存储 焱融科技 文件存储

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