scala – 宏的目的是什么?
这里我的重点是
Scala和Lisp / Scheme宏,而不是C/C++ / Obj-C中的宏
我只是没有看到这一点. 我理解它的方式是,宏可以扩展语言.功能也是如此. 我知道有些东西由于某些语言限制而无法干净地实现,因此需要一种宏观方式.但是我用宏看到的很多例子似乎是使用普通函数实现起来相当简单的事情. 那究竟是什么目的呢?清洁宏或其他,有人请赐教.如果可能的话,请提供一些可以在宏中完成的示例代码,但是对于普通函数来说是不可能/很难的. 解决方法
有一个关于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中概述的内容.然而,令人好奇的是,在许多情况下,既不是纯宏,也不是无宏解决方案,而是精心构建的混合最终成为最好的. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |