Me gustaría conocer buenas estrategias para implementar un lenguaje específico de dominio que debe ejecutarse en al menos 2 idiomas (Java, C#) y probablemente más (Python y posiblemente Javascript).escribiendo un lenguaje específico de dominio portátil
Algunos antecedentes. Hemos desarrollado y desplegado un lenguaje específico de dominio actualmente escrito en C#. Se implementa mediante una serie de llamadas a métodos cuyos argumentos son primitivos de lenguaje común (cadena, doble, etc.), Colecciones (IEnumerable, HashSet, ...) u objetos en una biblioteca específica de dominio (CMLMolecule, Point3, RealSquareMatrix). La biblioteca está bien probada y los objetos tienen que cumplir con un esquema XML implementado estable, por lo que el cambio será evolutivo y administrado (al menos esa es la esperanza).
Esperamos que el lenguaje sea utilizado por una comunidad amplia y parcialmente informatizada, acostumbrada a hackear sus propias soluciones sin control central. Idealmente, la DSL creará un grado de encapsulación y producirá la funcionalidad esencial que necesitan. Las bibliotecas administrarán los algoritmos detallados que son muchos y variados pero bastante conocidos. Hay mucho en común con los requisitos de DSL en Domain-specific languages vs. library of functions.
Agradecería ideas sobre la mejor arquitectura (claramente una vez que se implementa no podemos retroceder fácilmente). Las opciones incluyen al menos:
- Creación de un IDL (por ejemplo, a través de CORBA). El W3C hizo esto para XML DOM - Lo odié - y parece ser excesivo
- creación manual de firmas similares para cada plataforma y el mejor esfuerzo para mantenerlas sincronizadas.
- Creación de un lenguaje analizable (por ejemplo, CSS).
- programación declarativa en XML (c.f. XSLT). Esta es mi solución preferida, ya que se puede buscar, manipular, etc.
El rendimiento no es importante. La claridad de propósito es
EDIT Se debatió si la aplicación llama a una DSL. Descubrí la introducción de Martin Fowler a las DSL (http://martinfowler.com/dslwip/Intro.html) donde argumenta que las llamadas a métodos simples (o llamadas encadenadas) se pueden llamar DSL. Así que una serie como:
point0 = line0.intersectWith(plane);
point1 = line1.intersectWith(plane);
midpoint = point0.midpoint(point1);
podría considerarse una conexión DSL
Un gran negativo a cualquier idioma expresada en XML. ¿Pretendería que un desarrollador trabaje directamente con el XML o ese sería el formato de almacenamiento/tiempo de ejecución? El tipo que inventó ANT dijo que XML era la opción incorrecta y elegiría de manera diferente si podía cambiar las cosas. – SteveD
@stevendick. Gracias, escuché lo que dices. Personalmente soy un adicto al XML, pero trato de mantener la mente abierta. –
Eche un vistazo a lo que el autor original de ANT tiene para decir: http://web.archive.org/web/20040602210721/x180.net/Articles/Java/AntAndXML.html No siga ciegamente el XML- Paradigma de Golden Hammer. Si va a crear una lectura DSL y escrita por personas reales, considere usar una de las muchas herramientas lindas/analizadores agradables en lugar de XML. Hay muchas buenas herramientas en estos días (como ANTLR) que hacen que esto sea práctico. Escribir lexers/analizadores no es tan doloroso ahora como lo era cuando lex/yacc era lo último en tecnología. –