宏的目的是什么?

电咖啡

在这里,我主要关注的是Scala和Lisp / Scheme宏,而不是C / C ++ / Obj-C中的宏

我只是不明白要点。

据我了解,宏是用来扩展语言的。但是功能也是如此。

我了解由于某些语言限制,某些事情无法完全实现,因此需要使用宏。但是我在宏中看到的许多示例似乎都是使用常规函数实现起来相当简单的事情。

那么目的到底是什么?清理宏或其他方式,请有人启发我。如果可能的话,请提供一些示例代码,说明可以在宏中完成的代码,但对于正常功能而言是不可能/很难做到的。

尤金·布尔马科(Eugene Burmako)

有关使用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中进行了概述然而,令人好奇的是,在许多情况下,既不是纯宏解决方案,也不是无宏解决方案,而是经过精心构造的混合算法最终才是最好的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章