InfoQ Geekathon 大模型技术应用创新大赛 了解详情
写点什么

Rust 1.13 带来新的错误处理操作符,并改进了性能

  • 2016-11-17
  • 本文字数:1050 字

    阅读完需:约 3 分钟

在 1.13 版本中,Rust 核心团队的主要工作是通过引入新操作符?改进该语言的错误处理语法、优化编译时间以及新增对类型级宏的支持。

当本地策略是沿着调用链向上传播错误时,Rust 新操作符?可以简化错误处理。换句话说,如果你有一个可以返回错误的函数,那么你要使用类似下面这样的代码片段调用它,以防调用失败:

复制代码
let result = foo();
let mut result = match result {
Ok(val) => val,
Err(e) => return Err(e),
}

// 或者,你可以使用try操作符

复制代码
let mut result = try!(foo());

新操作符?可以看作是上述try语法的简写,可以让代码更简洁:

复制代码
let mut result = foo()?;

新语法的好处是,让函数调用链更明显,如下所示:

复制代码
try!(try!(try!(foo()).bar()).baz())

// 变成:

复制代码
foo()?.bar()?.baz()?

据 Rust 核心团队介绍,操作符?被定义为一个 Rust 宏。关于 Rust 如何在不影响语言底层特性的情况下提供新的语法,这就是一个例子。

Rust 1.13 还对编译器进行了几项新的优化,可以在多个场景中将编译时间缩减 50%。下图就是个很好的说明,它展示了在 1.13 开发过程中编译时间在 Rust 基准测试中的变化:

在 9 月份,在其中两项基准测试中,编译时间出现了陡降,1 处是源自改进了关联类型的缓存,在此之前,每次需要它们时都要计算。

编译器的另一项改进是优化了函数内联处理,只有当Crate 真得调用了内联函数时才会进行。关于这项改进所带来的好处,有一个极端的例子是尚未发布的Crate winapi–0.3 ,因为这项改进,rustc 只会生成中间 MIR 表示供其他 Crate 使用,而不会生成任何机器代码。

要了解更多有关编译器的优化,请点击这里

Rust 1.13 还带来了其他一些值得注意的变化:

复制代码
macro_rules! Tuple { { $A:ty,$B:ty } => { ($A, $B) } }
let x: Tuple!(i32, i32) = (1, 2);

当进行类型级编程(即计算类型)时,开发人员可以借此表示递归和选择。

复制代码
// 对单个语句应用 lint 属性
#[allow(uppercase_variable)] let BAD_STYLE = List::new();

除了 lint 属性外,开发人员还可以指定条件编译属性以及作为外部工具注解的自定义属性。

以 ARM 作为目标平台的开发人员应该注意,Rust 1.13 包含一个严重的代码生成Bug ,你们应该使用1.14 Beta 版。

在150 多名贡献者的努力下,Rust 1.13 还带来了许多其他的变化,感兴趣的读者可以阅读发布说明

查看英文原文 Rust 1.13 Brings New ? Error Handling Operator, Performance Improvements, and More

活动推荐:

2023年9月3-5日,「QCon全球软件开发大会·北京站」 将在北京•富力万丽酒店举办。此次大会以「启航·AIGC软件工程变革」为主题,策划了大前端融合提效、大模型应用落地、面向 AI 的存储、AIGC 浪潮下的研发效能提升、LLMOps、异构算力、微服务架构治理、业务安全技术、构建未来软件的编程语言、FinOps 等近30个精彩专题。咨询购票可联系票务经理 18514549229(微信同手机号)。

2016-11-17 18:001751
用户头像

发布了 1008 篇内容, 共 361.7 次阅读, 收获喜欢 334 次。

关注

评论

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

人才是企业决胜的关键,企业进行全球布局时,如何解决人才供应问题?

用友BIP

人力资源 数智人力

快手 Flink 的稳定性和功能性扩展

Apache Flink

大数据 flink 实时计算

DataLeap的全链路智能监控报警实践(一):常见问题

字节跳动数据平台

数据挖掘 数据分析 DataLeap 数据运维

腾讯董志强出席全国信安标委“标准周”:数字化转型需要高安全等级架构

腾讯安全云鼎实验室

云安全 企业安全 安全标准

从飞书妙记秒开率提升,看火山引擎A/B测试在研发场景的应用

字节跳动数据平台

AB testing实战 A/B 测试

【网易云信】如何定位分析视频异常画面

网易智企

音视频技术 视频异常

软件测试/测试开发丨iOS App自动化测试

测试人

ios xcode 程序员 软件测试

window.performance(前端性能监控并进行上报)

不叫猫先生

Performance 6 月 优质更文活动

汇众智,奔涌向前赢未来 | 2023开放原子全球开源峰会 OpenAtom openEuler 分论坛即将启幕

开放原子开源基金会

开源 openEuler 开放原子全球开源峰会 开放原子

本机部署langchain+chatGLM本地知识库

IT蜗壳-Tango

6 月 优质更文活动

软件测试/测试开发丨Pytest测试框架学习笔记分享

测试人

程序员 软件测试 自动化测试 数据驱动 pytest

一分钟学会C4D与Blender做缝线的方法

Finovy Cloud

blender C4D

华为云FunctionGraph函数工作流—— “Serverless“遇见”AI,释放AI生产力

华为云PaaS服务小智

Serverless 华为云 A2M

AI 协助办公 |记一次用 GPT-4 写一个消息同步 App

NebulaGraph

GPT

英特尔PowerVia技术率先实现芯片背面供电,突破互连瓶颈

E科讯

中企出海,海外税务管理体系怎么设计?

用友BIP

中企出海

昇腾实战丨DVPP媒体数据处理图片解码问题案例

华为云开发者联盟

人工智能 华为云 华为云开发者联盟 企业号 6 月 PK 榜

API全场景零码测试机器人,华为云发布ATGen in CodeArts TestPlan

华为云开发者联盟

云计算 华为云 华为云开发者联盟 企业号 6 月 PK 榜

用友荣获“2023年度上市公司数字化转型优秀案例”

用友BIP

卡奥斯开源社区六月创作之星挑战赛开始啦!

Openlab_cosmoplat

人工智能 编程 活动 开源社区

2023开放原子全球开源峰会“开发者之夜”高能剧透!

开放原子开源基金会

开源 开放原子全球开源峰会 开发者之夜

【网易云信】如何定位分析视频异常画面

网易云信

音视频技术 视频异常

Springboot3 + SpringSecurity + JWT + OpenApi3 实现认证授权

京茶吉鹿

spring security springboot OpenAPI JWT

Ascend C sqrt算子实战

华为云开发者联盟

人工智能 华为云 华为云开发者联盟 企业号 6 月 PK 榜

为什么说财务共享中心是财务转型的支撑

用友BIP

财务共享

数智时代的客服中心变革:从成本到价值

创智荟

数字化 大模型 客服 生产运营

人脸面部表情识别技术的挑战和未来发展

来自四九城儿

云图说|ModelArts开发环境,让AI开发、探索、教学更简单

华为云开发者联盟

人工智能 华为云 华为云开发者联盟 企业号 6 月 PK 榜

企业数智底座白皮书:详解数智平台必备的六大能力

用友BIP

白皮书 数智平台 数智化转型白皮书 数智平台白皮书

[ABAQUS有限元分析]挤扩支盘桩支护基坑优化设计方法

思茂信息

abaqus abaqus软件 abaqus有限元仿真

活动预告 | 中国数据库联盟(ACDU)中国行定档深圳,一起揭秘数据库前沿技术

墨天轮

MySQL 数据库 oracle postgresql opengauss

  • 扫码添加小助手
    领取最新资料包
Rust 1.13带来新的错误处理操作符,并改进了性能_语言 & 开发_Sergio De Simone_InfoQ精选文章