【问题标题】:Metaprogramming in Scala Regarding DSLsScala 中关于 DSL 的元编程
【发布时间】:2014-01-14 18:41:07
【问题描述】:

我知道动态语言(Ruby、Clojure、Groovy)提供元编程支持,但 Scala 呢?

Scala 中的元编程是否有用于创建 DSL 的用例?

Caveat - 我不完全了解元编程,但认为它可能有助于在运行时处理创建新的 DSL 语法/规则(可能/可能不正确)。

我读过这篇有用的 question,但我更感兴趣的是为什么(如果有的话)在 Scala 中使用元编程。

【问题讨论】:

    标签: scala metaprogramming dsl


    【解决方案1】:

    现在 Scala 中的元编程主要围绕 Scala 宏,这是一种相对较新且仍处于试验阶段的编译时元编程工具。

    尽管它们相对不成熟和复杂(它们不容易编写),但宏已经在许多项目中使用,因为它们看起来很有希望用于许多用途。例如看这个视频:What Are Macros Good For

    【讨论】:

    • 有了 Scala 丰富的内部 DSL 和强大的解析器组合器,我为什么需要宏?我看了那个视频,但是不太明白
    • 一些原因包括:1) 更好的性能和更少的样板代码,这要归功于编译时代码生成(例如,解析器组合器很慢,但由于宏,它们可以变得更快),2) 更强大验证比当前提供的类型,3) 直接访问用户编写的 DSL 程序的结构,而不必通过许多特殊安排的方法来路由用户来捕获他们的意图(例如,参见语言集成查询示例)。
    • @KevinMeredith,一个基于 ad-hoc 组合器的运行时 DSL 解释器几乎总是比完全静态的、分阶段的、精心设计的 eDSL 编译器更难实现和调试。在几乎所有可能的方面,解释总是比汇编更糟糕。不幸的是,与 Lisp 宏不同,Scala 宏非常有限。
    • @SK-logic,从概念上讲,我的理解是编译时宏优于运行时规则的评估,因为 (1) 编译时 > 运行时。但是,ghik... their relative immaturity and complexity (they're not easy to write) 总结了当前 Scala 宏面临的挑战吗?作为一个非初学者、非专业的 Scala 开发人员,我发现解析器组合器对于实现简单的规则是很清楚的。
    • @SK-logic 你能否详细说明一下为什么 Scala 宏设计不当?
    猜你喜欢
    • 1970-01-01
    • 2011-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多