2025上半年,最新 AI实践都在这!20+ 应用案例,任听一场议题就值回票价 了解详情
写点什么

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

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

关注

评论

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

解耦远不止依赖注入

canonical

架构设计 解耦 依赖注入

Github上标星98K!火爆全网的性能调优实战手册,出自腾讯T4大佬

Java 性能优化 性能调优

架构师日记-从数据库发展历程到数据结构设计探析 | 京东云技术团队

京东科技开发者

数据库 京东云 企业号 5 月 PK 榜

采用Excel作为设计器的开源中国式报表引擎:NopReport

canonical

开源 低代码 报表 BI 报表 中国式报表

性能优化多重要?凭借华为791页Mysql金字塔性能调优手册,进阿里

Java MySQL 性能优化 性能调优

低代码平台中的GraphQL引擎

canonical

开源 低代码 领域驱动模型DDD 中台架构 graphql 低代码平台

从可逆计算看Delta Oriented Programming

canonical

开源 低代码 软件产品线工程 可变性管理 可逆计算

从张量积看低代码平台的设计

canonical

开源 低代码 架构设计 低代码平台 领域模型

为什么说百度AMIS框架是一个优秀的设计

canonical

开源 前端架构 低代码 低代码平台 百度AMIS

低代码平台需要什么样的ORM引擎?(1)

canonical

开源 低代码 ORM 低代码平台 Spring JPA

玩转服务器之环境篇:PHP和Python环境部署指南 | 京东云技术团队

京东科技开发者

php Python 京东云 企业号 5 月 PK 榜 轻量云服务器

Wallys / QCN9074/QCN9024 WIFI 6E 802.11AX 4X4 6GHz wifi module.

Cindy-wallys

这份阿里逆天的Redis手册,于内卷中首次亮相了

Java你猿哥

Java redis 面试 Redis 核心技术与实战 redis 底层原理

企业应该知道的几种网络安全防护措施!

行云管家

网络安全 网络 信息

BSN-DDC基础网络详解(十一):官方门户OpenAPI说明及开发资料汇总

BSN研习社

你管这破玩意叫缓存穿透?还是缓存击穿?

Java 数据库 redis 缓存穿透 缓存击穿

如何在不修改基础产品源码的情况下实现定制化开发

canonical

开源 低代码 定制化 迭代增量开发 可扩展性

云原生背景下如何配置 JVM 内存

Java 容器 云原生 JVM

如果重写SpringBoot,我们会做哪些不同的选择?

canonical

开源 低代码 架构设计 springboot spring ioc

背靠香港影视集团星光文化,StarNFT问世了

小哈区块

低代码平台需要什么样的ORM引擎?(2)

canonical

开源 mybatis 低代码 jpa ORM

什么是声明式编程

canonical

函数式 声明式 命令式

Paxos的魔法学研究报告

canonical

paxos协议 共识算法 分布式, 分布式算法 深入理解分布式共识算法

XDSL:通用的领域特定语言设计

canonical

开源 低代码 dsl 领域特定语言 领域语言工作台

Y组合子的一个启发式推导

canonical

函数式编程 函数式 Lambda演算 Y组合子 不动点

低代码平台中的自动化测试

canonical

开源 低代码 自动化测试 自动化测试框架 低代码平台

从可逆计算看开源低代码平台Skyve的设计

canonical

开源 低代码 架构设计 低代码平台 扩展机制

不是单例的单例——巧用ClassLoader

PPPHUANG

单例模式 ClassLoader ContextClassLoader Java web

系统学Java,看这篇Java综合笔记万字总结就够了!纯干货分享

Java你猿哥

Java spring 面试 ssm 多线程与高并发

小微企业运维用哪款软件好?有免费的吗?

行云管家

运维 安全运维 小微企业

支持GraalVM原生编译的开源低代码平台:Nop Platform

canonical

开源 低代码 GraalVM Quarkus 低代码平台

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