Rust团队高兴地宣布,Rust新版本1.13.0发布了。作为一个系统级的编程语言,Rust专注于安全、速度和并发性。
和以前一样,你可以从本站安装Rust 1.13.0,更多细节可以参见Github上的发布详情,一共有1448个补丁。
对Rust用户来说,本季度非常繁忙。我们有三场Rust相关会议:RustConf、RustFest、Rust Belt Rust。亲自参加这些会议是一段很棒的经历,有些会议是第一次举办。关于Rust的未来,我们想了很多,为此还设计了一个2017年路线图,去实现用户希望获取的工具。
1.13稳定版的新特性
1.13版对语言进行了一些扩展,包括期待已久的?
操作符、编译时的优化,以及对Cargo和标准库的修改。此外,还有来自很多贡献者的文档优化和错误报告,没有体现在release notes中。
此版本包含对Cargo的重要安全更新,有关curl和OpenSSL的依赖(最近它们也都发布了安全更新)。更多信息可以参考相关的文档,curl 7.51.0和OpenSSL 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 翻译:赖信涛 责编:仲培艺