写点什么

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:002663
用户头像

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

关注

评论

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

[网络]跨区域网络的通信学习路由表的工作原理

flow

签约计划第三季

克服“看牙恐惧”,我们用技术改变行业

Lily

一文简述:SRv6基本原理

穿过生命散发芬芳

7月月更 SRv6

架构实战营第8模块作业

Geek_53787a

远光软件获得阿里云产品生态集成认证,携手阿里云共建新合作

阿里巴巴云原生

阿里云 云原生 合作

阿里云 Serverless 异步任务处理系统在数据分析领域的应用

阿里巴巴云原生

阿里云 Serverless 数据分析 云原生

私有化部署的即时通讯平台,为企业移动业务安全保驾护航

BeeWorks

【干货】如何建立支持和产品之间的密切关系?

Geek_da0866

2022就业季|Spring认证教你,如何使用 Spring 构建 REST 服务

Spring认证

spring Spring JPA

震撼首发!2022全网最全465页Java性能调优笔记,吃透轻松涨薪15w

了不起的程序猿

java 14 java程序员 性能调优 Java性能调优

从0到1:基于云开发的投票小程序开发笔记

CC同学

小程序云开发 投票小程序

顿悟!百度强推的Redis天花板笔记,原来数据库是这样理解的

冉然学Java

分布式 redis' 技术专题合集 #java redis 底层原理

2022就业季|Spring认证教你,如何使用 Spring 构建 REST 服务(五)

Spring认证

云原生编程挑战赛火热开赛,51 万奖金等你来挑战!

阿里巴巴云原生

阿里云 云原生编程挑战赛

C#/VB.NET:在PDF中插入文本水印

Geek_249eec

C# PDF VB.NET 水印

GIS数据漫谈(六)— 投影坐标系统

ThingJS数字孪生引擎

[网络]跨区域网络的通信学习IPv4地址的分类和计算

flow

签约计划第三季

有奖征文 | 2022 云原生编程挑战赛征稿活动开启!

阿里巴巴云原生

阿里云 云原生编程挑战赛

2022就业季|Spring认证教你,如何使用 Spring 构建 REST 服务(四)

Spring认证

Java spring

认识中小型局域网WLAN

flow

签约计划第三季

2022就业季|Spring认证教你,如何使用 Spring 构建 REST 服务(三)

Spring认证

Java spring spring认证

认识中小型局域网MAC地址及分类

flow

8月月更

直播|StarRocks 技术内幕 :低基数全局字典优化

StarRocks

数据库

MQTT over QUIC:下一代物联网标准协议为消息传输场景注入新动力

EMQ映云科技

车联网 物联网 IoT mqtt 弱网

2022就业季|Spring认证教你,如何使用 Spring 构建 REST 服务(二)

Spring认证

Java spring

为什么客户支持对SaaS公司很重要?

Geek_da0866

深圳线下报名|StarRocks on AWS:如何对实时数仓进行极速统一分析

StarRocks

数据库

以数字化转型为契机,3C企业如何通过SRM供应商云协同平台实现高效协同?

数商云

数字化转型 企业数字化 SRM系统

跨区域网络的通信学习静态路由

flow

签约计划第三季

多线程与高并发—— 源码解析 AQS 原理

王小凡

Java 程序员 AQS JVM 多线程

图的连通性之普里姆算法和克鲁斯卡尔算法

乔乔

7月月更

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