返回 登录
0

Rust发布1.3版本:加入?操作符处理错误

阅读1472

Rust团队高兴地宣布,Rust新版本1.13.0发布了。作为一个系统级的编程语言,Rust专注于安全、速度和并发性。

和以前一样,你可以从本站安装Rust 1.13.0,更多细节可以参见Github上的发布详情,一共有1448个补丁。

对Rust用户来说,本季度非常繁忙。我们有三场Rust相关会议:RustConfRustFestRust Belt Rust。亲自参加这些会议是一段很棒的经历,有些会议是第一次举办。关于Rust的未来,我们想了很多,为此还设计了一个2017年路线图,去实现用户希望获取工具

1.13稳定版的新特性

1.13版对语言进行了一些扩展,包括期待已久的?操作符、编译时的优化,以及对Cargo和标准库的修改。此外,还有来自很多贡献者的文档优化和错误报告,没有体现在release notes中。

此版本包含对Cargo的重要安全更新,有关curl和OpenSSL的依赖(最近它们也都发布了安全更新)。更多信息可以参考相关的文档,curl 7.51.0OpenSSL 1.0.2j

* ?操作符*

Rsut现在加入了一个新的操作符?,来减少处理错误时繁琐的代码。之前,如果我们要从一个文件中读取数据,通常需要下面这样:

fn read_username_from_file() -> Result<String, io::Error> {
    let f = File::open("username.txt");

    let mut f = match f {
        Ok(file) => file,
        Err(e) => return Err(e),
    };

    let mut s = String::new();

    match f.read_to_string(&mut s) {
        Ok(_) => Ok(s),
        Err(e) => Err(e),
    }
}

上面这部分代码有两部分可能出错:打开文件的时候和从文件中读取数据的时候。任何一部分出错的话,我们就会从read_username_from_file返回一个错误。为此,我们在I/O操作的结果上引入了matching。在这个例子中,我们只是需要简单地将错误向上传播至调用栈,matching却让代码变得冗长繁琐,这样并不能给用户提供简洁有用的信息。

有了?,上面的代码可以写成这样:

fn read_username_from_file() -> Result<String, io::Error> {
    let mut f = File::open("username.txt")?;
    let mut s = String::new();

    f.read_to_string(&mut s)?;

    Ok(s)
}

?就是我们前面写的match语法的简化形式。换句话说,?应用于一个Result结果,如果是OK,就解包给出内部值。如果是Err,就返回给目前的函数。从视觉上说,这种写法更加直接。比起之前用大段的match声明,现在只需要一个简单的?就能说明我们在这个地方用了标准的错误处理。

性能提升

此版本中,我们为编译器性能的优化付出了很大努力。

Mark Simulacrum和Nick Cameron优化了perf.rust-lang.org——我们追踪编译器性能的工具。它在指定的硬件上定时运行https://github.com/rust-lang-nursery/rustc-benchmarks套件,定时检测结果。这套工具可以帮助编译器工程师缩小性能回归的范围,是我们集成的工具箱中一个重要的工具。

图片描述

使用这个工具,我们可以看一下1.13开发周期的性能图表,数据包括从8月16日到9月29日的。很显然在性能上有很大的提升。

上图中9月1日一个很大的性能提升是Niko产生式翻译时缓存标准化的表现。

有关此版本更多的信息,可以查看release note

原文Announcing Rust 1.13
作者:The Rust Core Team 翻译赖信涛 责编:仲培艺

评论