当前位置:嗨网首页>书籍在线阅读

03-Rust宏的应用场景

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

9.2 Rust宏的应用场景

使用宏的一个好处是它们不像函数那样急切地解析其参数,这是使用除函数之外的宏的动机之一。

135.png 注意

及早求值的意思是调用类似foo(bar(2))这样的函数,将首先计算出bar(2)的结果,然后将其传递给foo。与此相反的是惰性求值,你将在迭代器中看到它。

一般的经验法则是,宏可以在函数无法提供所需解决方案的情况下使用,其中的代码具有相当的重复性,或者在需要检查类型结构体并在编译期生成代码的情况下使用宏。以实际应用场景为例,在很多情况下都会用到Rust宏,如下。

  • 通过创建自定义领域特定语言(Domain-Specific Language,DSL)来扩展语言语法。
  • 编写编译期序列化代码,就像serde那样。
  • 将计算操作移动到编译期,从而减少运行时开销。
  • 编写样板测试代码和自动化测试用例。
  • 提供零成本日志记录抽象,例如log软件包。

同时应该谨慎地使用宏,它们会使代码难以维护和理解。这是因为它们是在元级别工作,所以没有多少开发人员会习惯使用它们。它们使代码更难理解,从可维护性的角度来看,可读性的优先级始终应该排在前面。此外,大量使用宏会导致性能损失,因为会产生大量重复的代码,这会影响CPU指令缓存。