HarmonyOS开发者限时福利来啦!最高10w+现金激励等你拿~ 了解详情
写点什么

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

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

关注

评论

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

可灵重大升级!新增Web端上线、首尾帧控制、单次生成视频时长增加至10s!

快手技术

大模型 视频生成 可灵 企业号2024年7月PK榜

双良集团:不断进阶的数智化

用友BIP

FL studio 20破解版,水果音乐制作编曲软件

Rose

AI+制造丨引领智能制造迈向新纪元

用友BIP

给你安利一个程序员上岸公务员的开源项目

不在线第一只蜗牛

开源 程序员 上岸

C/C++ 集成开发环境(IDE) JetBrains CLion 2023 for Mac v2023.3.2中文激活版

Rose

详解 Postman 中 OAuth 2.0 授权的步骤

Liam

Java 后端 Postman 授权

ABBYY FineReader PDF 15 for Mac(ocr文字识别软件)v15.2.13中文激活版

Rose

PDF Checkpoint for mac(PDF自动化批处理工具)v1.9.21激活版

Rose

Win11镜像下载

Rose

Acrobat Pro DC 2021 for Mac(专业PDF编辑软件)v2021.007.20091中文版

Rose

Set A Light 3D Studio for Mac(3D摄影棚布光工具)v2.58d永久试用版

Rose

复杂表单一键填充,让信息输入更轻松

HarmonyOS SDK

HarmonyOS

中科九洲科技股份有限公司通过电子标准院《低代码开发平台能力要求》测评

电子标准院软工研究室

解锁AB测试的力量

FunTester

Reallusion Cartoon Animator 2D动画设计制作软件 v4.51.3511.1中文激活版

Rose

AI时代的阅读革新!微信读书基于腾讯云ES的“AI问书”RAG最佳实践

腾讯云大数据

ES ;RAG

亚马逊API接口推荐:亚马逊商品详情数据接口(amazon.item_get)

tbapi

亚马逊API 亚马逊商品详情数据接口 亚马逊商品详情API 亚马逊商品数据采集

Java 在成本资源控制下, 千万级别数据查询优化

伤感汤姆布利柏

Ableton Live 11 Suite for Mac v11.3.11中文版 音乐制作软件

Rose

上海梦创双杨数据科技股份有限公司通过电子标准院《低代码开发平台能力要求》测评

电子标准院软工研究室

软工智库|低代码篇(四)——低代码开发平台如何应用?

电子标准院软工研究室

Acrobat Pro DC 2024 PDF编辑转换器 v24.001.20604中文激活版

Rose

【YashanDB知识库】表收集统计信息默认阈值引起SQL执行效率差

YashanDB

yashandb 崖山数据库

探讨篇(四):分布式数据访问解决方案

京东科技开发者

软工智库|低代码篇(五)——低代码开发平台有何建议?

电子标准院软工研究室

使用coconutBattery Plus, 您始终了解当前的电池健康状况。

Rose

Visio Viewer for Mac(Visio文件查看工具)v3.1.0激活版

Rose

面试前:各方面都匹配 面试后:恐怕是凉了

王中阳Go

Go 数据库 面试 后端 面经

Cellebrite UFED 4PC 7.69 (Windows) - Android 和 iOS 移动设备取证软件

sysin

UFED 数字取证

Python 性能分析的几个方法,找到你代码中的那个她!

我再BUG界嘎嘎乱杀

Python 编程 后端 性能分析 开发语言

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