写点什么

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

2017 年 7 月 27 日

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> 特性。
  • SplitWhitespace 现在实现 Clone 特性。

Rust 软件包管理器 Cargo 实现了一些改进。特别是 Cargo 不再为 crates.io 索引而检出本地工作目录,这有助于改进性能并降低注册表的规模。除此以外,改进还包括:build 脚本可以通过修改自身所使用的环境去构建一个 Crate;在使用–all 时去除指定软件包的新选项–exclude。

对于已经安装了 Rust 的开发人员,可以使用如下命令更新版本:

复制代码
rustup update stable

也可以首次使用 rustup 工具去构建它。

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

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

2017 年 7 月 27 日 19:00855
用户头像

发布了 226 篇内容, 共 59.5 次阅读, 收获喜欢 14 次。

关注

评论

发布
暂无评论
发现更多内容

开发实践丨用小熊派STM32开发板模拟自动售货机

华为云开发者社区

物联网 小熊派 开发板

关于Redis分布式锁这一篇应该是讲的最好的了,赶紧收藏起来

比伯

Java 编程 架构 面试 技术宅

23种设计模式与六大原则看了又忘,忘了又看?是你看的方法不对!

Java成神之路

Java 程序员 架构 面试 编程语言

一文教你看懂缓存穿透、击穿、雪崩、降级等异常

鄙人薛某

Java 缓存 后端 缓存击穿 缓存雪崩

Redis为什么这么快?

数据君

redis

Java架构速成笔记:七大专题,1425页考点,挑战P8岗

Java架构追梦

Java 学习 面试 java架构

企业面临大危机,CRM崩溃告急,程序员竟用特殊手段化解危机!

Learun

敏捷开发 CRM

得不到提升的开发老鸟,试试这3个方法,让你事半功倍!

Linux服务器开发

程序员 互联网人 后端开发 底层应用开发 Linux服务器开发

2年Java外包经验程序员的逆袭之路,4面阿里斩获P6级offer的面经总结。

Java成神之路

Java 程序员 架构 面试 编程语言

阿里P9架构师推荐的Spring领域巅峰之作《Spring技术内幕:深入解析Spring架构与设计原理(第2版)》,带你深入解析Spring架构与设计原理

Java成神之路

Java 程序员 架构 面试 编程语言

不满意社区的轮子,我们自创了一套 React Hooks 风格的数据加载方案

LeanCloud

API React Hooks

网咯请求中的 connectTimeout 和 soTimeout

不在调上

数据库面试要点:关于MySQL数据库千万级数据查询和存储

华为云开发者社区

数据库 sql 存储

P8架构挑战:七大专题1425页考点,你能成功吗?

小Q

Java 学习 程序员 架构 面试

JVM调优不知道怎么回答,阿里总结四大模块,学不会就背过来

小Q

Java 学习 架构 面试 JVM

了不起!靠技术脱贫,他们只用了短短两年!

华为云开发者社区

人工智能 华为 技术

甲方日常 65

句子

工作 随笔杂谈 日常

终于拿到蚂蚁金服Offer!!!分享一下全程面试题和面试经验!

小Q

Java 学习 编程 架构 面试

连续肝了好几天,终于把Java面试最重要的必备知识【Spring知识点】总结整理出来了。

Java成神之路

Java 程序员 架构 面试 编程语言

业务中台建设-数据

孝鹏

架构 中台 数据 赋能

话题讨论 | 立一个近期的flag,你会想到什么?

xcbeyond

话题讨论

operator-sdk & kubebuilder

QiyihaoLabs

k8s operator-sdk kubebuilder crd

只需三步!慢日志去无踪

数据君

数据库

电信新报告 | 数字化转型:搁置还是加速?

VoltDB

5G安全 通信 电子信息

安装MySQL后,需要调整的10个性能配置项

Simon

MySQL percona server

时序数据库DolphinDB与Druid的对比测试

DolphinDB

数据分析 时序数据库 Druid 数据库选择 DolphinDB

没有它你的DevOps是玩不转的,你信不?

华为云开发者社区

容器 DevOps 微服务

你可能不用,但你必须要会!面试必备的Java多线程知识点总结(思维导图+源码笔记),已整理成PDF版文档

Java成神之路

Java 程序员 架构 面试 编程语言

英特尔携手德晟达、游密,发布云会议终端解决方案,打造视听新体验

intel001

关于Kubernetes和Docker关系的八个问题

杨明越

Java“基础-中级-高级”程序员面试大全

Crud的程序员

Java java程序员 java基础

InfoQ 极客传媒开发者生态共创计划线上发布会

InfoQ 极客传媒开发者生态共创计划线上发布会

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