2011-01-24 15 views
8

Mamy wymóg tworzenia złożonych łańcuchów o stałej długości i zmiennej długości. Łańcuchy te mogą reprezentować profil klienta, zamówienie itp. Który język programowania oparty na JVM sugerujesz?Który język (który działa na JVM) najlepiej nadaje się do tworzenia DSL?

Pomysł polega na tym, że użytkownik końcowy tworzy łańcuchy przy użyciu tego DSL. Tak więc szukam sprawdzania poprawności, uzupełniania kodu itp.

+0

Jak szybko musi być? Jak szybko musisz to zrobić? – EnabrenTane

+0

@EnabrenTane - Nie musi być super szybki –

+0

co z bardzo szybkim? bardzo szybko to zrobi? czy tylko super szybko? j/k: p – hhafez

Odpowiedz

5

Z Xtext (http://www.eclipse.org/Xtext/) otrzymasz ładny edytor za darmo podczas określania swojego DSL.

+0

Mamy obszerną wiedzę o naszych modelach meta i generowaniu kodu. Z tego co doświadczyłem, redaktorzy są słabi. Nie są one gotowe na aplikacje skierowane do klienta. –

+1

@Pangea: to może dlatego, że OAW jest dwa lata dłużej nie utrzymany. Xtext jest przeróbką, osiągnął 1,0 w ostatnim pociągu zwalniającym Eclipse (Galileo). Narzędzie idealnie pasuje do przypadku użycia - oferuje sprawdzanie poprawności i automatyczne uzupełnianie, konspekt, hiperłącza, poprawki, podświetlanie i wiele więcej. Większość z tych rzeczy nigdy nie byłaby możliwa jako wewnętrzny DSL przy użyciu dowolnego sugerowanego języka. –

+0

@Gabriel thx dla tej aktualizacji. Zajrzę teraz do tego. Doceń, jeśli możesz wskazać mi artykuły i przykłady list DSL utworzonych przy użyciu nowego Xtext. –

-2

Brzmi jak problem dla silnika szablonowego Apache Velocity. Jest to biblioteka Java z szablonową składnią lub DSL, jeśli chcesz.

+2

Potrzebuję DSL. Templating engine nie jest opcją. Pomysł polega na tym, aby użytkownik tworzył ciągi za pomocą tego DSL. Już patrzyłem na Velocity, StringTemplate itp. –

+0

Więc co to jest DSL? Prędkość ma język, który jest szczególnie dobry do generowania treści tekstowych. Jest to język specyficzny dla domeny. Jeśli masz określone wymagania, które nie są spełnione przez silniki szablonów i ich języki, możesz lepiej opisać, jakie są te wymagania. –

7

Use a Lisp który działa na JVM. Niektóre wybory masz:

  1. Clojure
  2. JScheme
  3. SISC
  4. ABCL
  5. Bigloo (nie działa na JVM, ale ma dobre współdziałanie Java).

Jest a good free book, który wyjaśnia, jak korzystać z Lisp do projektowania oprogramowania oddolne, tj jak rosnąć Lisp w języku, który jest idealny do rozwiązania problemu pod ręką.

Języki rodziny Forth doskonale nadają się również do definiowania połączeń DSL. Istnieje kilka, które działa na JVM:

  1. Niue
  2. Misty Beach Forth
+0

Oto lista DSL utworzonych za pomocą Clojure: http://stackoverflow.com/a/3968289/410652 –

4

Scala całą drogę! Scala jest szczególnie odpowiednia do wewnętrznego DSL (pls refer this).

6

Istnieją dwa rodzaje DSL; zewnętrzne i osadzone.

Zewnętrzna strona DSL jest całkowicie oddzielona od języka hosta, tzn. Jest napisana poza językiem, ale zwykle służy do generowania kodu w języku hosta. W tym podejściu XText z XPand są prawdopodobnie najlepszymi narzędziami, ponieważ prosty plik gramatyczny generuje kompletny edytor oparty na Eclipse dla nowego DSL i można używać szablonów kodu w XPand do generowania rzeczywistego kodu Java. XTend i XPand są napisane w Javie, ale jest to przypadkowe, ponieważ można je napisać w dowolnym miejscu, pod warunkiem, że skończysz z kodem Java na końcu procesu.Minusem tego podejścia jest to, że w przypadku każdego rozsądnie złożonego problemu język stanie się dość złożony i wiele pracy będzie wymagane w gramatyce, a nawet więcej w szablonach generowania kodu. Nie można używać żadnych funkcji języka hosta, takich jak ocenianie wyrażeń, więc wszystko to wymaga przebudowy w DSL, jeśli jest to potrzebne. XText wkrótce zawierać XBase, który jest częściowym językiem, który będzie zawierał wyrażeń, aby pomóc tutaj.

Innym podejściem jest osadzone łącze DSL, w którym funkcje domeny wysokiego poziomu są wyrażane w języku hosta za pomocą konstruktów wyższego rzędu (takich jak HOF i monady), zazwyczaj spotykanych w językach funkcjonalnych lub za pomocą takich narzędzi meta-programowania jak makra (np. Seplenienie). Java nie ma żadnej z nich, więc jest złym wyborem dla pracy DSL (lub większości innych form programowania abstrakcyjnego). Spring Roo oferuje obiekt typu meta-programowania dla java z generowaniem, więc może to być opcja. W przeciwnym razie program Scala jest prawdopodobnie najbardziej popularnym językiem Java w języku JVM, który jest popularny i ma potrzebne udogodnienia.

Wbudowane łącza DSL są zwykle znacznie łatwiejsze niż zewnętrzne DSL, ponieważ masz pełne wsparcie języka hosta, więc moją rekomendacją byłoby wypróbowanie Scala.

+0

dziękuję za szczegółowe za i przeciw, nie mówiąc po prostu * zrób to w moim ulubionym języku jvm. –