Какой язык (который работает на JVM) лучше всего подходит для создания DSL? - PullRequest
8 голосов
/ 24 января 2011

У нас есть требование создавать сложные строки фиксированной длины и переменной длины.Эти строки могут представлять профиль клиента, заказ и т. Д. Какой язык программирования на основе JVM вы, ребята, предлагаете?

Идея заключается в том, чтобы конечный пользователь создал строки с использованием этого DSL.Поэтому я ищу подтверждение, завершение кода и т. Д.

Ответы [ 8 ]

8 голосов
/ 24 января 2011
7 голосов
/ 24 января 2011

Используйте Lisp , который работает на JVM. У вас есть выбор:

  1. Clojure
  2. JScheme
  3. SISC
  4. ABCL
  5. Bigloo (не работает на JVM, но имеет хорошую совместимость с Java).

Существует хорошая бесплатная книга , в которой объясняется, как использовать Lisp для разработки программного обеспечения снизу вверх , то есть, как вырастить Lisp в язык, который идеально подходит для решения поставленной задачи.

Языки в семействе Forth также отлично подходят для определения DSL. На JVM работает несколько:

  1. Niue
  2. Мисти Бич Форт
6 голосов
/ 02 февраля 2011

Существует два типа DSL; внешний и встроенный.

Внешний DSL полностью отделен от вашего языка хоста, т.е. вы пишете его вне языка, но обычно используется для генерации кода на языке хоста. Для этого подхода XText с XPand, вероятно, являются лучшими инструментами, поскольку простой файл грамматики генерирует полный редактор на основе Eclipse для нового DSL, и вы можете использовать шаблоны кода в XPand для генерации реального кода Java. XTend и XPand написаны на Java, но это случайно, так как они могут быть написаны на чем угодно, если в конце процесса вы получите код Java. Недостатком этого подхода является то, что для любой достаточно сложной проблемы язык станет довольно сложным, и потребуется много работы по грамматике и даже больше по шаблонам генерации кода. Вы не можете использовать какие-либо функции на главном языке, такие как оценка выражений, поэтому все это необходимо перестроить в DSL, если вам это нужно. XText вскоре будет включать XBase, который является частичным языком, который будет включать выражения, чтобы помочь здесь.

Другой подход - это встроенный DSL, в котором высокоуровневые доменные функции выражаются на языке хоста либо с помощью конструкций более высокого порядка (таких как HOF и монады), обычно встречающихся в функциональных языках, либо с помощью средств метапрограммирования, таких как макросы (например, Lisp). ). В Java нет ни одного из них, поэтому это плохой выбор для работы с DSL (или большинством других форм абстрактного программирования). Spring Roo предлагает тип метапрограммирования для Java с использованием генерации, так что может быть вариант. В противном случае Scala, вероятно, является наиболее популярным языком Java, подобным JVM, и обладает необходимыми средствами.

Встроенные DSL обычно намного проще, чем внешние DSL, потому что у вас есть полная поддержка основного языка, поэтому я рекомендую попробовать Scala.

5 голосов
/ 24 января 2011

С Xtext (http://www.eclipse.org/Xtext/) вы получите бесплатный редактор при указании DSL.

4 голосов
/ 24 января 2011

Скала полностью!Scala особенно подходит для внутренних DSL (см. this ).

2 голосов
/ 24 января 2011

Я бы порекомендовал Groovy для этого.

0 голосов
/ 24 января 2011

Я предложу Джруби.Я сделал несколько, и всегда было легко получить то, что я хочу.

http://www.artima.com/rubycs/articles/ruby_as_dsl3.html

0 голосов
/ 24 января 2011

Звучит как проблема для движка шаблонов Apache Velocity.Это библиотека Java с синтаксисом шаблонов или DSL, если хотите.

...