写点什么

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

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

关注

评论

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

这5个有趣、强大的AIGC,你值得拥有

没有用户名丶

火山引擎基于 Dragonfly 加速实践

SOFAStack

开源 开发者 开发

OpenAI 发布ChatGPT 插件支持,官方文档译文

B Impact

真香!180页100+题15W+字解析的《Java高级面试指南》,果断收下

做梦都在改BUG

Java java面试 Java八股文 Java面试题 Java面试八股文

硬核!最全“Java面试宝典+Java核心知识集”,一箭双雕杠春招

做梦都在改BUG

Java java面试 Java八股文 Java面试题 Java面试八股文

华大北斗上榜“深圳知名品牌”

江湖老铁

QPSK/DQPSK 调制解调系统仿真

timerring

通信系统仿真

周杰伦在唱什么?数据可视化告诉你!

博文视点Broadview

什么是 LuaJIT?为什么 Apache APISIX 选择了 LuaJIT?

API7.ai 技术团队

lua api 网关 APISIX API Gateway

2023年中国品牌全域智能营销白皮书

易观分析

营销 品牌

来2023全球边缘计算大会与EMQ探讨云边协同落地实践

EMQ映云科技

物联网 IoT 边缘计算 emq 企业号 3 月 PK 榜

操作系统跻身国家战略,中国操作系统开源社区走向何方?

OpenCloudOS

Linux 操作系统 DPU 大禹智芯 opencloudOS

江苏银行与易观千帆达成合作,打造金融服务“新样本”

易观分析

金融 银行 经济

活动回顾|龙蜥社区云原生 SIG 首届 MeetUp 圆满落幕 持续打造面向云时代的竞争力

OpenAnolis小助手

开源 云原生 Meetup 龙蜥社区 sig

linux环境arm64架构编译iotDB

小黄鱼

Thrift IoTDB arm64

大模型时代的异构计算平台

百度Geek说

人工智能 深度学习 AI 企业号 3 月 PK 榜

来啦!OceanBase DevCon • 2023议程公布!

OceanBase 数据库

数据库 oceanbase

浅谈 Java线程状态转换及控制

Java你猿哥

Java 后端 多线程 ssm Java工程师

面试官:给你一段SQL,你会如何优化?

做梦都在改BUG

Java MySQL 数据库 sql 性能优化

视频回放编辑工具:Mitti 激活版

真大的脸盆

Mac 视频处理 Mac 软件 视频编辑 视频回放工具

MobPush Android 厂商通道回执配置指南

MobTech袤博科技

MQTT安全专题01|构建可靠的物联网系统

EMQ映云科技

物联网 IoT mqtt 物联网安全 企业号 3 月 PK 榜

面试官:说说什么是单点登录?什么是SSO?什么是CAS?

Java你猿哥

Java ssm CAS SSO

【3.17-3.24】写作社区优秀技术博文一览

InfoQ写作社区官方

热门活动 优质创作周报

JVM超神之路:金三银四跳槽需要的JVM知识点,都给你整理好了

Java你猿哥

Java 面试 JVM 面经 Java工程师

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