写点什么

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

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

关注

评论

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

AWS Command Line Interface 使用S3入门

阿呆

AWS S3

大咖眼中的AI开源|王敏捷:深图在人工智能中的探索和研究

亚马逊云科技 (Amazon Web Services)

网络

2022年,跨境ERP还是一门好生意吗?

ToB行业头条

尚硅谷《MySQL高级特性篇》教程发布

@零度

MySQL

大咖眼中的AI开源 | 张建:图神经网络和DGL的实际应用

亚马逊云科技 (Amazon Web Services)

网络

Kafka的生产集群部署

编程江湖

kafka

使用亚马逊云科技安全服务防御、检测和响应 Log4j 漏洞

亚马逊云科技 (Amazon Web Services)

网络

【前端】一文彻底学会Promise

恒生LIGHT云社区

JavaScript 前端 Promise

Hibernate 如何生成 JPA 的 Metamodel

HoneyMoose

TCP socket和web socket的区别

汪子熙

前端 node,js 1月月更

一个基于PoS共识算法的区块链实例解析(升级版)

恒生LIGHT云社区

区块链 共识算法 PoS

1月月更|推荐学Java——第一个MyBatis程序

逆锋起笔

Java mybatis SSM框架 MyBatis标签 mybatis配置

Amazon EC2 串行控制台——化繁为简,高效解决网络问题

亚马逊云科技 (Amazon Web Services)

网络

如何提高后台服务应用问题的排查效率?日志 VS 远程调试

汪子熙

node.js 后台开发 1月月更

java开发之SpringBoot转发和重定向

@零度

JAVA开发 springboot

高新技术企业几维科技加入龙蜥,为操作系统安全添砖加瓦

OpenAnolis小助手

Linux 开源

一文了解登陆Hoo虎符的Moonbeam治理通证GLMR

区块链前沿News

Hoo 虎符交易所 Moonbeam GLMR

为什么要把系统拆分成分布式的?为啥要用dubbo?

JavaEdge

1月月更

JavaScript 12种设计模式汇总

编程江湖

JavaScript

读《底层逻辑》

wood

300天创作

模块六作业

Geek_e6f7f6

架构训练营

如何突破职业瓶颈

FunTester

Go 性能测试 测试框架 FunTester 职业瓶颈

面试突击15:说一下HashMap底层实现?及元素添加流程?

王磊

react源码解析19.手写迷你版react

buchila11

React

开源走向世界(下):从数据库技术演进看开源力量丨BDTC 2021

PingCAP

ReactNative进阶(十四):初探 Gradle

No Silver Bullet

Gradle React Native 1月月更

如何优雅的遍历Mycat分库表

编程江湖

mycat

万字总结Keras深度学习中文文本分类

华为云开发者联盟

深度学习 CNN keras 文本分类 TextCNN

IntelliJ IDEA 的 Metamodel 配置

HoneyMoose

The Data Way Vol.9|还不清楚商业化之于开源的价值?建议你看看这家公司

SphereEx

数据库 开源 播客 ShardingSphere SphereEx

react源码解析20.总结&第一章的面试题解答

buchila11

React

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