博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Rust 1.30带来更多元编程支持,并改进了模块系统
阅读量:5861 次
发布时间:2019-06-19

本文共 1968 字,大约阅读时间需要 6 分钟。

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

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

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

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

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

// 解析SQL语句let sql = sql!(SELECT * FROM posts WHERE id=1);#[proc_macro]pub fn sql(input: TokenStream) -\u0026gt; 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(\u0026quot;...\u0026quot;); // OK}mod foo {    // 为在模块种使用serde_json,必须显式使用use    use serde_json;    fn bar() {        let json = serde_json::from_str(\u0026quot;...\u0026quot;);    }    fn baz() {      // 也可以使用外部模块的完整限定名      let json = ::serde_json::from_str(\u0026quot;...\u0026quot;);    }

最后,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的完整细节,请查阅。

查看英文原文:

转载地址:http://pygjx.baihongyu.com/

你可能感兴趣的文章
我的友情链接
查看>>
MSC-2015移动安全挑战赛 第二题
查看>>
class卸载、热替换和Tomcat的热部署的分析
查看>>
xxxx已损坏,打不开。您应该推出磁盘映像
查看>>
Centos7升级内核
查看>>
Android4.4 xposed安装失败(the xposed framework is not installed)
查看>>
17 VMware云的配置与管理
查看>>
pycharm安装第三方插件!
查看>>
解决SSH登录linux服务器慢的问题
查看>>
RadioGroup 的使用 ;
查看>>
selenium应用指南
查看>>
页面滚动条滚动后返回事件----JS
查看>>
攻读计算机研究生的合理性
查看>>
LVS负载均衡(5)——LVS+Keepalived
查看>>
转发接口或下一跳网关的使用情况
查看>>
Windows Phone 8 常用UI控件 (一)
查看>>
CSS渐变色效果的实现方法与效果演示
查看>>
Sort如何进行排序,如何根据出现次数取IP
查看>>
fedora15 ubuntu 11.04
查看>>
composer遇到Your configuration does not allow connection to http://的问题怎么解决
查看>>