2013-02-28 4 views
2

У меня есть несколько «строителей» Groovy DSL, сделанных с FactoryBuilderSupport (SwingBuilder, являющихся каноническим примером) и главным образом из-за проблем с производительностью (а также потому, что я беспокоюсь о будущем Groovy, например, Groovy 3 включает новый MOP?), я рассматриваю альтернативные рамки для внутренней DSL на основе JVM.Портирование Groovy DSL на Clojure

Поскольку у Clojure есть как замыкания, так и макросы, это достойный кандидат, но я не знаю, как легко с Clojure манипулировать связанными с динамикой объектами Java, такими как в Groovy-скриптах (кстати, я знаком с LISP-языком familiy но не с особенностями Clojure).

Кроме того, я предполагаю, что, если я подожду достаточно долго, Nashorn Java 8 добавит Javascript в качестве другого возможного кандидата.

Итак, насколько хорошим может быть Clojure (или, возможно, даже JavaScript) поддерживать такой DSL по сравнению с Groovy?

+0

Почему новая СС вас беспокоит? – Will

+0

Я волнуюсь, что он не сделает сокращение в Groovy 3. И у нынешнего есть некоторые неприятные проблемы. – Rhangaun

+1

Принесите свои идеи и заботы: http://docs.codehaus.org/display/GroovyJSR/GEP+11+-+Groovy+3+semantics+and+new+MOP – Will

ответ

2

Clojure, вероятно, лучший JVM-язык для создания DSL, поскольку он имеет макросы. Некоторые примеры, которые могут вдохновить вас (из https://stackoverflow.com/a/3968289/476116):

  • Enlive (HTML шаблонный)
  • LazyTest (Юнит)
  • fnparse (генератор парсеров)
  • Midje (тестирование & насмешливая)
  • byte-spec (двоичные форматы)
  • Vijual (диаграмма макета)
  • Trammel (ограничение программирования)
  • Cascalog (Hadoop ж/регистрации данных синтаксиса)
  • Incanter (R-среде)
  • Sandbar (HTML сеансов, форм, аутентификации)
  • ClojureQL (SQL)
  • mini-kanren (встроенный логическое программирование)
  • Leiningen (построить инструмент)
  • sexpbot (IRC бот с плагином арку)

И конечно seesaw как пример качели DSL.