@Rays
2017-07-26T15:48:03.000000Z
字数 1097
阅读 1651
语言开发
Rust
摘要: Rust 1.19实现了多个语言上的改进,其中包括无标签联合(Non-tagged Union),及一些新的标准库特性。
作者: Sergio De Simone
正文:
Rust 1.19实现了多个语言上的改进,其中包括无标签联合(Non-tagged Union),及一些新的标准库特性。
在Rust中,联合类似于enums
,但是联合是无标签的。这意味着在Rust中使用union
从本质上看是不安全的,因为无可用信息指明实际在用的联合中变量。下面给出一个定义和使用Rust联合的例子:
union MyUnion {
f1: u32,
f2: f32,
}
let u = MyUnion { f1: 1 };
unsafe { u.f1 = 5 };
let value = unsafe { u.f1 };
fn f(u: MyUnion) {
unsafe {
match u {
MyUnion { f1: 10 } => { println!("ten"); }
MyUnion { f2 } => { println!("{}", f2); }
}
}
}
Rust中引入联合,不仅使开发人员更易于与暴露联合的C API进行接口,而且意在简化那些可节约空间的结构的实现。
在Rust 1.19中,现在可以在loop
表达式中使用break
并返回值,这在行为上类似于一个表达式。例如:
let x = loop { break 7; };
正如我们前面所提及的,Rust 1.19在软件库方面也提供了一些新特性。首先,1.19提供了一对新的宏eprint!
和eprintln!
,这使得向标准错误写入更为直接,不必再写入到标准输出。
其它新的软件库特性包括:
String
现在实现了FromIterator<Cow<'a, str>>
和Extend<Cow<'a, str>>
特性。Vec
现在实现了From<&mut [T]>
特性。Box<[u8]>
现在实现了From<Box<str>>
特性。SplitWhitespace
现在实现Clone
特性。Rust软件包管理器Cargo实现了一些改进。特别是Cargo不再为crates.io索引而检出本地工作目录,这有助于改进性能并降低注册表的规模。除此以外,改进还包括:build脚本可以通过修改自身所使用的环境去构建一个Crate;在使用--all
时去除指定软件包的新选项--exclude
。
对于已经安装了Rust的开发人员,可以使用如下命令更新版本:
rustup update stable
也可以首次使用rustup工具去构建它。
如需获取更多的信息,可阅读详细的发行说明。