BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

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

| 作者 Sergio De Simone 关注 13 他的粉丝 ,译者 谢丽 关注 10 他的粉丝 发布于 2016年11月18日. 估计阅读时间: 4 分钟 | 如何结合区块链技术,帮助企业降本增效?让我们深度了解几个成功的案例。

在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还带来了其他一些值得注意的变化:

  • 升级Cargo,将curlOpenSSL的最新安全补丁包含进来;
  • 宏可以在类型位置中使用,如下所示:

    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

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT