Groovy vs Scala для внутренней DSL

Я собираюсь создать внутреннюю DSL для JVM. И я вижу, что Scala и Groovy являются лучшими кандидатами для этой задачи. Я обнаружил, что Groovy script менее подробный, по умолчанию используется BigDecimal, а Scala - хорошая система вывода типов. Каковы другие различия между этими языками в контексте внутренней DSL?

РЕДАКТИРОВАТЬ: Наконец, я выбрал Groovy, и после одного года разработки DSL это кажется правильным выбором: я могу воспользоваться выводами типа и статическими типами в Groovy 2.0 и по-прежнему используют динамические типы, когда это необходимо, методы/свойства диспетчеров обработки отлично работают, ASTTransforation позволило мне изменить семантику языка, Groovy плагин для eclipse и IDEA имеют встроенную поддержку для DSL-адресов Groovy, а синтаксис DSL - больше кратким, чем в Scala. Хотя есть еще кое-что для улучшения, поскольку некоторые динамические функции не всегда срабатывают, как я ожидал.

Ответ 1

У меня нет опыта работы с DSL в Scala, но могу сказать, что динамическая природа Groovy через протокол метаобъектов делает его хорошо подходящим для DSL. Я нашел эту серию, чтобы быть полезной при исследовании DSL в Groovy. Вероятно, вы также захотите взглянуть на страницу Мартина Фаулера, которая включает ссылку на его книгу по этому вопросу.

Ответ 2

Я работал над DSL для тестирования в Scala. Я думаю, что вы в конечном итоге напишите больше кода интерпретации в Scala (типа конверсий и т.д.), Но как только у вас есть, нет причин, по которым ваш DSL должен быть более или менее подробным. Окупаемость заключается в том, что (как только IDE догонят) у вас будет завершение кода, чтобы помочь записать в ваш DSL Scala.

Scala соответствие шаблонов также является огромной победой в написании кода интерпретации.

Ответ 3

В 1.8 добавлено количество Groovy Качество DSL.

Groovy - хорошее место для начала.

Взгляните на Gradle. Это инструмент сборки, написанный в Groovy, а язык сборки - это DSL.