写点什么

Rust 1.30 带来更多元编程支持,并改进了模块系统

  • 2018-11-15
  • 本文字数:1385 字

    阅读完需:约 5 分钟

Rust 1.30带来更多元编程支持,并改进了模块系统

Rust 的最新版本1.30扩展了过程宏,允许它们定义新的属性和类似于函数的宏。此外,它简化了 Rust 模块系统,使其更加一致、直观。


Rust 1.30 引入了两种新类型的过程宏,“类属性的过程宏”和“类函数的过程宏”。过程宏是 Rust 元编程的基础,支持操作程序语法树。在这方面,过程宏要比声明宏强大得多,声明宏提供了一种机制来定义基于模式匹配的更复杂代码的简写。


类属性过程宏类似于现有的派生宏,但是更灵活,因为它们允许你创建新的属性,并且除了结构和枚举之外,还可以应用于函数。例如,一个属性宏可以实现 route 属性规范,定义 HTTP 路由:


// 使用路由过程宏#[route(GET, "/")]fn index() { ...}
// 过程宏定义路由#[proc_macro_attribute]pub fn route(attr: TokenStream, item: TokenStream) -> TokenStream { // attr接收GET,宏的"/"部分 // item接收fn index () { ...}

复制代码


类似地,类函数过程宏允许你定义类似于函数的宏,例如:


// 解析SQL语句let sql = sql!(SELECT * FROM posts WHERE id=1);
#[proc_macro]pub fn sql(input: TokenStream) -> TokenStream {
复制代码


在这两个示例中,TokenStream 都表示应用属性的语法树或属性/函数定义。route/sql 函数将接收到的语法树转换为返回给调用者的新语法树,即生成要执行的新代码


在使用 Rust 模块系统时,Rust 1.30 还对 use 宏进行了一些修改,以提升开发人员的体验。首先,use 现在可以引入宏定义,从而淘汰了 macro_use 注解:


// 旧:#[macro_use]extern crate serde_json;
// 新:extern crate serde_json;use serde_json::json;
复制代码


此外,通过把所有对名称空间的引用都与 prelude 模块中包含的所有 extern crate 指令进行比较,并使用匹配的那个,使得外部 Crates 对于在模块层次结构中移动的函数具有更强的适应性。以前,必须显式地在模块内部使用 extern 或者使用::extern_name 语法,如下例所示:


extern crate serde_json;
fn main() { let json = serde_json::from_str("..."); // OK}
mod foo {
// 为在模块种使用serde_json,必须显式使用use use serde_json;
fn bar() { let json = serde_json::from_str("..."); }
fn baz() { // 也可以使用外部模块的完整限定名 let json = ::serde_json::from_str("..."); }

复制代码


最后,use 现在以更加一致的方式解释模块路径。现在,你可以使用 crate 关键字来表明你希望模块路径从 crate 根路径开始。在 1.30 版本之前,这是默认的模块路径,但是,直接引用项的路径将从本地路径开始:


mod foo {    pub fn bar() {        // ...    }}
mod baz { pub fn qux() { // 旧 ::foo::bar(); // 无效,这和使用“use”不同: // foo::bar();
// 新 crate::foo::bar(); }}
复制代码


Rust 1.30 还带来了如下变化:


  • 你现在可以通过加上前缀 r#把关键字作为标识符,例如 r#for。这种变化主要是因为 Rust 2018 将引入新的关键词,这样一种机制应当可以用于转换使用这些关键字作为变量或函数名的现有代码。

  • 借助 no_std,你现在可以构建应用程序而不使用标准库。以前,由于无法定义 panic_handler,所以你只能使用 no_std 构建库。


你可以使用 $ rustup update stable 更新 Rust 分发包。关于 Rust 1.30 的完整细节,请查阅发布说明


查看英文原文:Rust 1.30 Brings More Metaprogramming Support and Improved Modules


2018-11-15 07:152322
用户头像

发布了 1008 篇内容, 共 439.7 次阅读, 收获喜欢 346 次。

关注

评论

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

AI Agent开发需要注意的问题

北京木奇移动技术有限公司

软件开发、 AI应用 AI智能体

《Hive编程指南》读书笔记

京东科技开发者

AI赋能低代码平台的潜力:从自动化到个性化的全面解析

天津汇柏科技有限公司

低代码 AI人工智能

ps阴影插件shadowify for Mac下载安装教程

Rose

Real Glow:图像焕新之光,解锁逼真光影特效的魔法钥匙

Rose

软通智慧:鲲鹏原生开发助力 城市治理平台信息查询效率提升17%

极客天地

小红书笔记详情 API 接口:获取、应用与收益全解析

科普小能手

API API 接口 小红书笔记接口 小红书API 小红书笔记详情数据采集

【免费开源】JeecgBoot单点登录源码全部开源了

JEECG低代码

低代码 单点登录 低代码平台 JeecgBoot

(DR 5中文版)Delicious Retouch:人像修图的终极利器,重塑完美容颜

Rose

电商企业转起数据飞轮,火山引擎助力商家实现“数据找人”

字节跳动数据平台

大数据 数据飞轮

在ArkTS中,如何优化布局以提高性能?

威哥爱编程

HarmonyOS ArkTS HarmonyOS NEXT

Taro小程序开发性能优化实践

京东科技开发者

手把手教你华为鸿蒙开发之第八节

The Wang

HarmonyOS NEXT

Sketch Measure for Mac(sketch标注插件) v2.8.1中文激活版

Rose

Ample Sound Ample Ethno Banjo for mac(民族班卓琴) v1.5.0激活版

Rose

测试开发工程师如何打造高效的质量体系

测试人

软件测试

ChatGPT应用的开发流程

北京木奇移动技术有限公司

软件开发 AI应用 AI智能体

扬州等级测评机构叫什么名字?在哪里?

行云管家

等保 等保测评机构 扬州

Video Copilot Element 3D:一键开启 3D 特效盛宴

Rose

Deep Glow破解版下载 附永久激活码 (AE物理发光特效插件)

Rose

InheritableThreadLocal从入门到放弃

京东零售技术

后端 应用开发

百度智能云千帆大模型平台引领企业创新增长

百度Geek说

百度 智能云 大模型 百度千帆

Grequests,非常 Nice 的 Python 异步 HTTP 请求神器

左诗右码

mac电脑怎么彻底清除卸载的软件,苹果电脑卸载软件的实用技巧

阿拉灯神丁

性能优化 CleanMyMac X 卸载软件 应用程序卸载 mac 效率工具

中文汉化版AE插件 optical flares插件(镜头光晕耀斑插件) 附永久许可证

Rose

影视业一定要购买堡垒机吗?为什么?

行云管家

等保 等保测评 影视

圆极化平板天线仿真01【CST软件仿真实例】

思茂信息

cst cst操作 CST软件

一种轻量分表方案-MyBatis拦截器分表实践

京东科技开发者

Rust 1.30带来更多元编程支持,并改进了模块系统_编程语言_Sergio De Simone_InfoQ精选文章