你好,游客 登录 注册 搜索
背景:
阅读新闻

Rust 1.19添加了无标签联合及更多特性

[日期:2017-07-28] 来源:infoq.com  作者:Sergio De Simone ,译者 Rays [字体: ]

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工具去构建它。

如需获取更多的信息,可阅读详细的发行说明。

Rust 1.8发布下载,放弃了Unix系统的Make编译系统 http://www.linuxidc.com/Linux/2016-04/130451.htm

Rust 1.2 稳定版发布下载,Mozilla 编程语言  http://www.linuxidc.com/Linux/2015-08/121290.htm

为什么我说 Rust 是靠谱的编程语言  http://www.linuxidc.com/Linux/2015-05/117711.htm

Rust 1.2带来了更快的编译速度和并行代码生成  http://www.linuxidc.com/Linux/2015-08/121830.htm

Rust 的详细介绍请点这里
Rust 的下载地址请点这里

查看英文原文Rust 1.19 Adds Untagged Unions and More

本文永久更新链接地址http://www.linuxidc.com/Linux/2017-07/145933.htm

linux
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数

       

评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款