阿里、蚂蚁、晟腾、中科加禾精彩分享 AI 基础设施洞见,现购票可享受 9 折优惠 |AICon 了解详情
写点什么

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

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

关注

评论

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

java继承和多态,Java开发岗笔试题

Java 程序员 后端

腾讯数字生态大会|大数据与你相约武汉

腾讯云大数据

大数据

模块二作业

迪马

架构设计流程

天天向上

架构实战营

Java笔记 —— Set集合的排序原理,附答案+考点

Java 程序员 后端

模块二:如何抓住架构设计关键点? -- 学习总结

小鹿

Java面试被MySQL问哭了,面试官一个连环炮提问,我一个都讲不清

Java 程序员 后端

模块二作业

小朱

架构实战营

Java面试题超详细整理《Spring篇》,Tencent后台开发Java岗二面

Java 程序员 后端

java面试题,mybatis原理和实现机制

Java 程序员 后端

Java类的继承与组合经典实例,java自学教程百度云盘

Java 程序员 后端

Java集合之ArrayList详解,大厂越来越注重基础了,建议收藏

Java 程序员 后端

Java静态代理和动态代理的使用及原理解析,java项目面试难点

Java 程序员 后端

Java面试之多线程:Java创建多线程为什么只有一种方式?

Java 程序员 后端

Java面试屡碰壁,一气之下狂刷高分宝典,一月之后拿到字节offer

Java 程序员 后端

Java面试题超详细整理《多线程篇》,mongodb教程导入外部数据

Java 程序员 后端

Java程序员(阿里、京东,java系统架构设计详解

Java 程序员 后端

Java笔记 —— IO,java定时任务quartz面试

Java 程序员 后端

040022-week2-design

InfoQ_70156470130f

Java进阶之深入理解Java的接口和抽象类,剑指java面试百度云

Java 程序员 后端

架构实战营模块2课后作业

天天向上

架构实战营

架构 3 期模块二作业:下微信朋友圈的高性能复杂度

渐行渐远

架构实战营

Flink 实践教程:入门(3):读取 MySQL 数据

腾讯云大数据

flink 流计算 Oceanus

机器学习在基于源码的漏洞挖掘中的应用

maijun

机器学习 静态代码分析 源码漏洞挖掘 code embedding

Java系列高频面试题:序列化+注解,java基础入门第二版电子书

Java 程序员 后端

架构实战营第 1 期 - 毕业总结

Anyou Liu

「架构实战营」

【架构训练营】毕业设计

zclau

Java虚拟机(JVM)面试题(2020最新版),linux视频教程下载

Java 程序员 后端

Java程序员:面试字节跳动被问算法 多亏我扛下来了

Java 程序员 后端

Java进阶之梯,成长路线与学习资料,助力突破中间件领域

Java 程序员 后端

Java面试经,nginx解决跨域原理

Java 程序员 后端

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