Lenguajes Específicos del Dominio (DSL)
Autor: Michael Hunger

Cada vez que escuches una discusión de expertos de cualquier dominio, ya sean jugadores de ajedrez, maestros de jardín de niños o agentes de seguros, notarás que su vocabulario es un poco diferente del lenguaje diario. Es parte de los Lenguajes Específicos del Dominio (DSL). Un dominio específico tiene un vocabulario especializado para describir cosas que son particulares de ese dominio.

En el mundo del software, los DSL tratan sobre expresiones ejecutables en un lenguaje específico de un dominio con un limitado vocabulario y gramática que es legible, entendible y –afortunadamente– escribible por expertos del dominio. Los DSL dirigidos a desarrolladores de software o científicos han estado por aquí desde hace un largo tiempo. Por ejemplo, el “pequeño lenguaje” de Unix encontrado en archivos de configuración y los lenguajes creados con el poder de macros de LISP son de los más viejos ejemplos.

Los DSL son comúnmente clasificados como internos o externos:

  • Los DSL internos son escritos en un lenguaje de programación de propósito general, cuya sintaxis se ha inclinado a parecerse más al lenguaje natural. Es más fácil para los lenguajes que ofrecen azúcar sintáctica y posibilidades de formato (ej. Ruby y Scala) que para otros que no lo hacen (ej. Java). Muchos DSL internos envuelven API existentes, bibliotecas o código de negocio para proveer un contenedor con un acceso más alucinante a sus funcionalidades. Son ejecutados con sólo correrlos. Dependiendo en la implementación y el dominio, son usados para construir estructuras de datos, definir dependencias, ejecutar procesos o tareas, comunicarse con otros sistemas o validar entradas de usuario. La sintaxis de un DSL interno están contenidas en el lenguaje anfitrión. Hay muchos patrones –por ejemplo, constructores de expresiones, encadenadores de métodos y anotaciones– que pueden ayudarte a doblar el lenguaje anfitrión de tu DSL. Si el lenguaje anfitrión no requiere recompilación, entonces un DSL interno puede ser desarrollado rápidamente trabajando lado a lado con los expertos del dominio.
  • Los DSL externos son expresiones gráficas o textuales de un lenguaje, aunque los DSL textuales tienden a ser más comunes que los gráficos. Las expresiones textuales pueden ser procesadas por una cadena de herramientas que incluyen léxico, un analizador, un transformador de modelo, generadores, y cualquier otro tipo de posprocesamiento. Los DSL externos son frecuentemente leídos en modelos internos, los cuales forman los fundamentos para su posterior procesamiento. Es útil definir una gramática (por ejemplo, en EBNF). Una gramática provee un punto de partida para la generación de partes de la cadena de herramientas (por ejemplo, editor, visualizador, generador de analizadores). Para los DSL sencillos, un analizador hecho a mano podría ser suficiente; usando, por ejemplo, expresiones regulares. Los analizadores personalizados pueden llegar a ser difíciles de manejar si se espera mucho de ellos, así que tiene sentido mirar las herramientas diseñadas específicamente para trabajar con gramáticas del lenguaje; por ejemplo, openArchitectureWare, ANTlr, SableCC y AndroMDA. Es también común el definir DSL externos como los dialectos XML, aunque la legibilidad es frecuentemente un problema; sobre todo para los lectores no técnicos.

Siempre debes tomar en cuenta la audiencia objetivo de tu DSL. ¿Son desarrolladores, administradores, clientes de negocio o usuarios finales? Tienes que adaptar el nivel técnico del lenguaje, las herramientas disponibles, ayuda de sintaxis (por ejemplo, intellisense), validación temprana, visualización y representación a tu audiencia prevista. Al ocultar detalles técnicos, los DSL pueden empoderar a los usuarios, dándoles la habilidad para adaptar los sistemas a sus necesidades sin requerir la ayuda de los desarrolladores. También puede acelerar el desarrollo debido al potencial de distribución de trabajo después de que el framework inicial está en su sitio. El lenguaje puede evolucionar gradualmente. Hay también disponibles diferentes rutas de migración para expresiones existentes y gramática.

Traducción: Espartaco Palma

Leer contribución original