Pregunta

Tenemos el requisito de crear cadenas complejas de longitud fija y longitud variable. Estas cadenas pueden representar un perfil de cliente, un pedido, etc. ¿Qué lenguaje de programación basado en JVM sugirió ustedes?

La idea es que un usuario final cree las cadenas usando este DSL. Así que estoy buscando validación, finalización del código, etc.

¿Fue útil?

Solución

Con Xtext (http://www.eclipse.org/xtext/) Obtienes un buen editor de forma gratuita al especificar tu DSL.

Otros consejos

Usa un lisp Eso se ejecuta en el JVM. Algunas opciones que tienes:

  1. Clojure
  2. Jscheme
  3. Bandeja
  4. Abcl
  5. Bigloo (No se ejecuta en el JVM pero tiene una buena interoperabilidad de Java).

Hay Un buen libro gratis Eso explica cómo usar el software LISP para diseñar el software. de abajo hacia arriba, es decir, cómo crecer Lisp en un idioma que sea ideal para resolver el problema en cuestión.

Idiomas en el Adelante La familia también es excelente para definir DSL. Hay algunos que se ejecutan en el JVM:

  1. Niue
  2. Playa brumosa

Hay dos tipos de DSL; externo e incrustado.

Un DSL externo está completamente separado de su lenguaje de host, es decir, lo escribe fuera del idioma, pero generalmente se usa para generar código en el lenguaje de host. Para este enfoque, XText con XPand es probablemente las mejores herramientas, ya que un archivo gramática simple genera un editor completo basado en eclipse para el nuevo DSL y puede usar plantillas de código en XPand para generar código Java real. Xtend y XPand están escritos en Java, pero esto es incidental, ya que podrían escribirse en cualquier cosa siempre que termine con el código Java al final del proceso. La desventaja con este enfoque es que para cualquier problema razonablemente complejo, el lenguaje se volverá bastante complejo y se requerirá mucho trabajo en la gramática y aún más en las plantillas de generación de código. No puede usar ninguna característica del lenguaje de host como la evaluación de expresión, por lo que todo esto necesita reconstrucción en su DSL si lo necesita. XText incluirá en breve XBase, que es un lenguaje parcial que incluirá expresiones para ayudar aquí.

El otro enfoque es un DSL incrustado donde las características de dominio de alto nivel se expresan en el lenguaje host con construcciones de orden superior (como HOF y mónadas) típicamente que se encuentran en lenguajes funcionales o mediante instalaciones de metaprogramación como macros (EG LISP). Java no tiene ninguno de estos, por lo que es una mala opción para el trabajo DSL (o la mayoría de las otras formas de programación abstracta). Spring ROO ofrece una instalación de tipo metaprogramación para Java usando la generación, por lo que podría ser una opción. De lo contrario, Scala es probablemente el lenguaje más Java como JVM que es popular y tiene las instalaciones que necesita.

Los DSL integrados suelen ser mucho más fáciles que los DSL externos porque tiene el soporte completo del lenguaje de host, por lo que mi recomendación sería probar Scala.

Scala todo el camino! Scala es especialmente adecuada para DSL interno (por favor referirse este).

yo recomendaria Groovy para eso.

Sugeriré Jruby. He hecho algunos y siempre ha sido bastante fácil de obtener sobre lo que quiero.

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

Suena como un problema para el motor de plantilla de velocidad Apache. Es una biblioteca Java con una sintaxis de plantilla o DSL si lo desea.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top