有一个关于Scala宏已完成的事情的简明摘要:http://scalamacros.org/paperstalks/2014-02-04-WhatAreMacrosGoodFor.pdf.总而言之,已知宏有利于:1)代码生成,2)高级静态检查,3)授权特定于域的语言.让Scala中的宏基于类型为像Lisp类语言中的宏中常见的功能提供了额外的强大功能.
在上面链接的幻灯片一些例子确实没有宏来实现,但结果可能是在一定意义上缺乏(如性能)或为用户过于复杂(例如,由于权重股的错误消息).例如,Akka的类型化通道可以用纯粹的暗示实现,但编译速度和可理解性会受到影响.或者,scala/async可以作为编译器插件实现,但是它必须依赖于内部编译器API并且更难分发.
当然,宏不是银弹.当它们不是最佳选择时,显然存在用例,这是http://scalamacros.org/paperstalks/2014-03-01-MacrosVsTypes.pdf中概述的内容.然而,令人好奇的是,在许多情况下,无论是纯宏观还是无宏观解决方案,而是精心构造的混合动力车最终都是最好的.
| 归档时间: |
|
| 查看次数: |
601 次 |
| 最近记录: |