【QCon】精华内容上线92%,全面覆盖“人工智能+”的典型案例!>>> 了解详情
写点什么

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

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

关注

评论

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

生产环境全链路压测建设历程 21:某快递 A 股上市公司的生产压测案例之彩蛋 2 中篇

数列科技杨德华

全链路压测 七日更

架构师训练营第2期 第10周作业

月下独酌

极客大学架构师训练营

架构师训练营第2期 第10周总结

月下独酌

极客大学架构师训练营

多币种钱包app系统开发,数字货币交易所系统源码开发

程序员的bug修复宝典

程序员 经验总结 bug修复

全1子串算法求解、单元测试的必要性论述 John 易筋 ARTS 打卡 Week 32

John(易筋)

ARTS 打卡计划 全1子串算法求解 单元测试必要性

架构师训练营 第3期 第5周 作业和总结

ihiming

6. 抹平差异,统一类型转换服务ConversionService

YourBatman

Spring Framework 类型转换 Converter ConversionService

深入解析SpringMVC核心原理:从手写简易版MVC框架开始(SmartMvc)

Silently9527

Java mvc springmvc

掌趣电竞系统开发搭建

Geek_a620db

共享单车系统搭建

Geek_a620db

物联网目前的安全问题有哪些?

IoT云工坊

架构师训练营 - 大作业二

lucian

第 5 周学习总结

Binary

极客大学架构师训练营

指尖上的警务,打造微警务管理服务平台

t13823115967

智慧警务系统开发 微警务

关于Dubbo的原理

皮蛋

面试官:说说操作系统微内核和Dubbo微内核?

yes

dubbo 操作系统 微内核

海纳百川无所不容,Win10环境下使用Docker容器式部署前后端分离项目Django+Vue.js

刘悦的技术博客

Python Docker 容器 镜像 部署

使用 Serverless 创建一个简单的短网址服务

donghui

flask Serverless Lambda Store

HBC环保卫士系统搭建

Geek_a620db

vivo 互联网业务就近路由技术实战

vivo互联网技术

中间件 服务器 分布式路由

数据可视化平台搭建,警务实战平台大数据应用

t13823115967

数据可视化 可视化数据分析搭建 警务实战平台

物联网方面的竞赛有那些?

IoT云工坊

架构师训练营 - 大作业一

lucian

第十周作业总结

hunk

极客大学架构师训练营

第 5 周作业提交

Binary

极客大学架构师训练营

十、服务分解

Geek_28b526

数据库范式与反范式设计,是一门艺术

架构精进之路

数据库 范式

智能合约系统软件开发|智能合约APP开发

系统开发

2020年物联网行业有哪些新趋势

IoT云工坊

vivo 全球商城:订单中心架构设计与实践

vivo互联网技术

分库分表 服务器 架构设计

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