我有几个使用 FactoryBuilderSupport 制作的“构建器”Groovy DSL(SwingBuilder 是典型示例),主要是因为性能问题(也因为我担心 Groovy 的 future ,例如 Groovy 3 会包含新的 MOP 吗? ),我正在寻找基于 JVM 的内部 DSL 的替代框架。
由于 Clojure 同时具有闭包和宏,因此它是一个值得选择的候选者,但我不知道使用 Clojure 操作动态绑定(bind)的 Java 对象(如 Groovy 脚本中的对象)有多容易(顺便说一句,我熟悉 LISP 语言家族,但是不具有 Clojure 的特定功能)。
另外,我想如果我等待足够长的时间,Java 8 的 Nashorn 会添加 Javascript 作为另一个可能的候选者。
那么,与 Groovy 相比,Clojure(甚至可能是 JavaScript)在支持这种 DSL 方面有多好?
最佳答案
Clojure 可能是创建 DSL 的最佳 JVM 语言,因为它具有宏。 一些可能会给您带来启发的示例(摘自 https://stackoverflow.com/a/3968289/476116 ):
- Enlive (HTML 模板)
- LazyTest (单元测试)
- fnparse (解析器生成器)
- Midje (测试和模拟)
- byte-spec (二进制格式)
- Vijual (图形布局)
- Trammel (约束规划)
- Cascalog (Hadoop 带数据日志语法)
- Incanter (类似 R 的环境)
- Sandbar (HTML session 、表单、身份验证)
- ClojureQL (SQL)
- mini-kanren (嵌入式逻辑编程)
- Leiningen (构建工具)
- sexpbot (带有插件架构的 IRC 机器人)
当然还有seesaw作为 swing DSL 的示例。
关于javascript - 将 Groovy DSL 移植到 Clojure,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15141662/