写点什么

Rust 1.15 引入自定义 derive 特性

  • 2017-02-12
  • 本文字数:1277 字

    阅读完需:约 4 分钟

Rust 核心团队发布了 Rust 1.15 稳定版,新增了备受期待的自定义 derive 特性,让代码生成工具(如 Serde 和 Diesel)能最大效能地工作。

RFC 1681 文档中解释了自定义 derive 的动机:

目前生态系统中的一些大项目,如 Serde 和 Diesel,需要 nightly 版本的 Rust 编译器才可以有效地工作。虽然大多数项目在 Rust 稳定版本上都有替代的方案,但往往不能发挥最大效能,也有自身的一些缺点,而且从经验上来看不能够带来 nightly 版本用户同样的稳定性…

然而,好消息是,这些项目几乎都是由于程序宏的原因而使用 nightly 版本。而且除了自定义 derive 以外,程序宏的全部功能在其他功能中很少使用!更好的消息是,自定义 derive 通常不需要彻底的宏系统所应当具备的一些特性,例如卫生(hygiene)和模块化。正常的程序宏通常具有这些特性。

博文《公布 Rust 1.15》中提供了一个 Diesel 的例子:

复制代码
// some extern crate and use lines elided here
#[derive(Queryable)]
struct Pet {
name: String,
}
fn main() {
use diesel_demo::schema::pets::dsl::*;
let connection = establish_connection();
let results = pets
.limit(5)
.load::<pet>(&connection)
.expect("Error loading pets");
println!("Displaying {} pets", results.len());
for pet in results {
println!("{}", pet.name);
}
}
</pet>

除了自定义 derive,Rust 1.15 的其他改进包括使用 Cargo 重写的构建系统。Rust 团队评论说:

考虑到 Rust 所有的开发都在主分支上,去年 12 月我们开始使用并且运作良好。在一个未关闭的 PR 中完全删除了 Makefile,我们将会在 Rust 1.17 中采纳。它为 rustc 铺平道路,在编译器中可以像其他 Rust 项目一样使用 crates.io 中的包。

在其他重要领域,随着 1.15 稳定版本的发布,Rust 实现了对 i686-unknown-openbsd MSP430 以及 ARMv5TE 3 层支持。Hacker News 上关于 Rust 版本发布的讨论中,用户thenewwazoo评论说“哇!MSP430 的支持是伟大的。也许你不知道,这是一个众所周知的超低功耗单片机…这可能是目前唯一一个低于32 位的平台。我知道支持8 位AVR 架构还需要继续努力,但MSP430 让Rust 更接近超低功耗应用。”

其他用户对于Rust 1.15 的发布同样非常兴奋。Dikaiosune,“这是非常重要的。知道这次发布后,我可以删除小型Web 后端中所有nightly 版本的功能标志,该Web 后端中大量使用了类型驱动的代码生成工具(Serde 以及Diesel)。自定义derive 拥有稳定性保证,真是太好了。太激动了!”

Ekidd 表示赞同,并补充说,“我们有一堆Rust 应用程序在工作,只有一个仍然使用nightly 版本,现在我们也可以把它迁移到稳定版本了。我们可以在其他地方摆脱一堆build.rs 脚本了,这总是好的。”

Rust1.15 详细的发布说明可以在 GitHub 上获取,并且可以在这里下载安装包。

查看英文原文: Rust 1.15 Brings Custom Derive


感谢王纯超对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们。

2017-02-12 18:002753
用户头像

发布了 31 篇内容, 共 10.5 次阅读, 收获喜欢 0 次。

关注

评论

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

dubbogo 凌烟阁之 方银城

apache/dubbo-go

dubbogo 凌烟阁之 望哥

apache/dubbo-go

MapReduce 设计构思

五分钟学大数据

7月日更

Spring中这么重要的AnnotationAwareAspectJAutoProxyCreator类是干嘛的?

冰河

spring aop ioc springboot Spring注解

PowerShell 括号和别名

耳东@Erdong

PowerShell 7月日更

Python OpenCV 之图像梯度,Sobel 算子、Scharr 算子和 laplacian 算子

梦想橡皮擦

7月日更

第8模块作业

高亮

架构训练营

在线字节转换工具

入门小站

工具

七月上

卢卡多多

7月日更

模块8作业

梦寐凯旋

#架构实战营

作业1

🐻🐻

架构师训练营第 1 期 作业一

【LeetCode】H 指数Java题解

Albert

算法 LeetCode 7月日更

hdfs 中 datanode 工作机制以及数据存储

大数据技术指南

hdfs 7月日更

AI时代,智能硬件如何照亮求学之路

脑极体

模块一

吴科🍀

校友小程序图片安全审核方案与security.imgSecCheck不能校验超过1M图片的解决思路

CC同学

每天学习10个实用Javascript代码片段(四)

devpoint

JavaScript node,js 7月日更

八千里路云和月 | 从零到大数据专家学习路径指南

王知无

通过运行期类型检查实现泛型算法

喵叔

7月日更

Docker 超详细版(基础+进阶)

若尘

Docker 容器 镜像

职场中的换位思考,看这篇就够了

石云升

职场经验 7月日更 换位思考

用三国杀讲分布式算法,舒适了吧?

悟空聊架构

分布式 PAXOS 7月日更 三国杀 拜占庭

【建议收藏】数据可视化——带你从0-1实现折线图的多种方式

阿飞

大前端 js 数据可视化 canvas 图表

【Flutter 专题】89 图解基本 Overlay 悬浮新手引导

阿策小和尚

Flutter 小菜 0 基础学习 Flutter Android 小菜鸟 7月日更

就这样,我走过了程序员的前五年。一路风雨泥泞,前方阳光正好。

why技术

生活 励志 北漂 经验总结 日常感悟

Linux之目录结构

入门小站

Linux

Rust从0到1-智能指针-Rc<T>

rust 智能指针 引用计数 smart pointer Rc<T>

架构实战营 - 模块8 - 作业

笑春风

深入理解搜索引擎——详解query理解

药老算法

搜索引擎 nlp query纠错 语义分析 意图识别

模块8作业

薛定谔的指南针

架构实战营

初探 Redis 客户端 Lettuce:真香!

vivo互联网技术

Java 数据库 redis redis cluster lettuce

Rust 1.15 引入自定义derive特性_开源_James Chesters_InfoQ精选文章