陈天 · Rust 编程第一课
陈天
Tubi TV 研发副总裁
23196 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 65 讲
基础篇 (21讲)
陈天 · Rust 编程第一课
15
15
1.0x
00:00/00:00
登录|注册

加餐|代码即数据:为什么我们需要宏编程能力?

示例:sqlx的query宏,tokio的#[tokio::main]
没有特定场景,根据需要使用
示例:#[derive(Debug)], #[derive(Serialize, Deserialize)]
为trait提供固定模式的实现
派生宏(derive macro)
属性宏(attribute macro)
函数宏(function-like macro)
深入理解宏的工作原理
手写声明宏和过程宏
函数宏和属性宏
派生宏
示例:try!, ready!
无法用函数封装的重复性代码
分类
操作和改写Rust代码语法树
示例:vec![], println!, info!
类似C/C++宏,但更安全
通过macro_rules!描述
用代码生成代码的能力
开发者直接描述代码的AST
AST(抽象语法树)暴露给开发者
撰写宏的实践
过程宏
声明宏
过程宏(procedural macro)
声明宏(declarative macro)
减轻重复脚手架代码的需求
代码即数据:Lisp语言的特点
下一步
什么情况下使用宏
Rust的宏编程支持
为什么需要宏编程
宏编程能力

该思维导图由 AI 生成,仅供参考

你好,我是陈天。
应广大同学的呼吁,今天我们来讲讲宏编程。
最初设计课程的时候考虑知识点的系统性,Rust 的元编程能力声明宏、过程宏各安排了一讲,但宏编程是高阶内容后来删减掉了。其实如果你初步学习 Rust,不用太深究宏,大多数应用的场景,你会使用标准库或者第三方库提供的宏就行。不会做宏编程,并不影响你日常的开发。
不过很多同学对宏有兴趣,我们今天就深入聊一聊。在讲如何使用宏、如何构建宏之前,我们要先搞清楚为什么会出现宏。

为什么我们需要宏编程能力?

我们从设计非常独特的 Lisp 语言讲起。在 Lisp 的世界里,有句名言:代码即数据,数据即代码(Code is data, data is code)。
如果你有一点 Lisp 相关的开发经验,或者听说过任何一种 Lisp 方言,你可能知道,和普通编程语言不同的是,Lisp 的语言直接把 AST(抽象语法树)暴露给开发者,开发者写的每一行代码,其实就是在描述这段代码的 AST
这个特点如果你没有太看明白,我们结合一个具体例子来理解。这段代码是 6 年前,2048 游戏很火的时候,我用 Lisp 的一种方言 Racket 撰写的2048 的实现片段:
; e.g. '(2 2 2 4 4 4 8) -> '(4 2 8 4 8)
(define (merge row)
(cond [(<= (length row) 1) row]
[(= (first row) (second row))
(cons (* 2 (first row)) (merge (drop row 2)))]
[else (cons (first row) (merge (rest row)))]))
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

宏编程在Rust语言中的重要性和应用 本文深入探讨了宏编程的必要性及其在Rust语言中的应用。文章首先从Lisp语言的独特设计出发,强调了“代码即数据,数据即代码”的概念,指出Lisp语言直接将抽象语法树(AST)暴露给开发者,使得开发者编写的每一行代码实际上都在描述这段代码的AST。作者以具体的代码示例解释了这一概念,并指出一门语言若能暴露其语法树给开发者,允许开发者对语法树进行裁剪和嫁接,那么这门语言就具备了元编程的能力。 在介绍Rust语言对宏编程的支持时,文章提到了声明宏和过程宏两大类。声明宏通过`macro_rules!`描述,主要用于对代码模板做简单替换,类似于C/C++中的宏,但更加安全。而过程宏则更为灵活和强大,包括函数宏、属性宏和派生宏,能够在编译期进行处理,为代码块提供更多功能。 作者强调了Rust语言提供了足够强大的宏编程能力,可以通过宏来避免重复的脚手架代码,同时也对宏的使用进行了限制,以防止代码失控。总之,本文通过深入的技术讲解,阐述了宏编程在Rust语言中的重要性和应用,为读者提供了深入了解宏编程的知识和技术特点。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《陈天 · Rust 编程第一课》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(2)

  • 最新
  • 精选
  • 罗杰
    感谢老师的加餐
    2022-01-24
    5
  • 手机失联户
    期待下一讲!
    2022-01-24
收起评论
显示
设置
留言
2
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部