飞天发布时刻:2024年 Forrester 公有云平台Wave™评估报告解读 了解详情
写点什么

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

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

关注

评论

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

透过华为军团看科技之变(一):广域网络

脑极体

【愚公系列】2022年06月 二十三种设计模式(二十一)-策略模式(Stragety Pattern)

愚公搬代码

6月月更

阻塞队列实现原理

急需上岸的小谢

6月月更

共享主机和 WordPress 主机之间的区别

海拥(haiyong.site)

6月月更

数据库每日一题---第1天:超过经理收入的员工

知心宝贝

数据库 算法 前端 后端 6月月更

ElasticSearch部署架构和容量规划

IT巅峰技术

Python爬虫基础-requests模块-1

zyf

6月月更

UNet语义分割实战:使用UNet实现对人物的抠图

AI浩

图像分割 6月月更

【Python共建】Python 列表推导式

梦想橡皮擦

6月月更

JS原型、原型链深入理解

源字节1号

前端开发 后端开发

Fabric.js 上标和下标的使用偏方🔥

德育处主任

Web canvas 前端可视化 Fabric.js 6月月更

InfoQ 极客传媒 15 周年庆征文|分布式系统解决之道:目录、消息队列、事务系统及其他

No Silver Bullet

分布式系统 消息队列 6月月更 事务系统 InfoQ极客传媒15周年庆

SDN系统方法 | 2. 用例

俞凡

架构 网络 sdn SDN系统方法

SpringBoot下用Kyro作为Redis序列化工具

程序员欣宸

Java 6月月更 Kyro

在 CloudIDE 里实现天猫精灵自定义技能的业务逻辑

汪子熙

人工智能 机器学习 机器人 Cloud 6月月更

Flutter使用自定义字体

坚果

6月月更

在线HTML转JADE工具

入门小站

工具

RTP与RTCP协议简述

穿过生命散发芬芳

rtp/rtcp 6月月更

每日一题 | LeetCode 454 四数相加Ⅱ

武师叔

哈希表 Leet Code 6月月更

C#入门系列(三) -- 数据类型

陈言必行

C# 6月月更

Javascript中的垃圾回收

大熊G

JavaScript 前端 6月月更

云原生之 Ansible 篇(一)

看,未来

云原生

【LeetCode】统计一个数组中好对子的数目Java题解

Albert

LeetCode 6月月更

linux之yum下载rpm包离线安装

入门小站

Linux

【Spring 学习笔记(二)】Spring Bean 配置方式 与Spring Bean实例化

倔强的牛角

6月月更

迷宫问题java(DFS,回溯法,递归)

写代码两年半

DFS 迷宫 javase 回溯算法 6月月更

聊聊 Sharding-Jdbc 使用原理之分库分表下的分页方案

Nick

MySQL 分库分表 中间件 ShardingJDBC 6月月更

云原生之 Ansible 篇(二)

看,未来

云原生

在线人民币数字金额转成美元金额大写工具

入门小站

工具

vue-cli3项目目录结构介绍

小恺

6月月更

通过知识图谱看端午节

清林情报分析师

数据分析 数据可视化 端午节 数据分析师 知识图谱

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