Un lenguaje específico de dominio (DSL) es un lenguaje destinado a ser utilizado en el contexto de un dominio particular. Un dominio puede ser un contexto empresarial (por ejemplo, banca, seguros, etc.) o un contexto de aplicación (por ejemplo, una aplicación web, una base de datos, etc.) En cambio, un lenguaje de propósito general (GPL) puede utilizarse para una amplia gama de problemas y aplicaciones empresariales.
Un DSL no intenta complacer a todos. En su lugar, se crea para una esfera limitada de aplicabilidad y uso, pero es lo suficientemente potente como para representar y abordar los problemas y soluciones de esa esfera. Un buen ejemplo de un DSL es el HTML. Es un lenguaje para el ámbito de las aplicaciones web. No se puede utilizar, por ejemplo, para hacer cálculos numéricos, pero está claro que el uso de HTML está muy extendido en la web.
El creador de una GPL no sabe dónde se puede utilizar el lenguaje ni los problemas que el usuario pretende resolver con él. Así que una GPL se crea con construcciones genéricas que potencialmente son utilizables para cualquier problema, solución, negocio o necesidad. Java es un GPL, ya que se utiliza en ordenadores de sobremesa y dispositivos móviles, incrustado en la web a través de la banca, las finanzas, los seguros, la fabricación, etc., y mucho más.
Clasificación de los DSL
En el mundo de los DSL, hay dos tipos de lenguajes:
- Lenguaje específico de dominio (DSL): El lenguaje en el que se escribe o presenta un DSL
- Lenguaje anfitrión: El lenguaje en el que se ejecuta o procesa un DSL
Un DSL escrito en un lenguaje distinto y procesado por otro lenguaje anfitrión se denomina DSL externo.
Se trata de un DSL en SQL que puede ser procesado en un lenguaje anfitrión:
SELECT account
FROM accounts
WHERE account = '123' AND branch = 'abc' AND amount >= 1000
Por ejemplo, se podría escribir un DSL en inglés con un vocabulario y una forma definidos que pueden ser procesados en otro lenguaje anfitrión utilizando un generador de parser como ANTLR:
if smokes then increase premium by 10%
Si el DSL y el lenguaje anfitrión son el mismo, entonces el tipo de DSL es interno, donde el DSL se escribe en la semántica del lenguaje y es procesado por éste. También se denominan DSL incrustados. Aquí hay dos ejemplos.
- Un DSL de Bash que puede ser ejecutado en un motor Bash:
if today_is_christmas; then apply_christmas_discount; fi
Esto es Bash válido que se escribe como el inglés.
- Un DSL escrito en una GPL como Java:
orderValue = orderValue
.applyFestivalDiscount()
.applyCustomerLoyalityDiscount()
.applyCustomerAgeDiscount();Este utiliza un estilo fluido y es legible como el inglés.
- Web: HTML
- Shell: sh, Bash, CSH, y similares para *nix; MS-DOS, Windows Terminal, PowerShell para Windows
- Lenguajes de marcado: XML
- Modelación: UML
- Gestión de datos: SQL y sus variantes
- Reglas de negocio: Drools
- Hardware: Verilog, VHD
- Herramientas de construcción: Maven, Gradle
- Computación numérica y simulación: MATLAB (comercial), GNU Octave, Scilab
- Varios tipos de parsers y generadores: Lex, YACC, GNU Bison, ANTLR
- Xtext: Xtext permite el desarrollo de DSLs y se integra con Eclipse. Hace posible la generación de código y ha sido utilizado por varios productos de código abierto y comerciales para proporcionar funciones específicas. MADS (Multipurpose Agricultural Data System) es una idea interesante basada en Xtext para el «modelado y análisis de las actividades agrícolas» (sin embargo, el proyecto parece que ya no está activo).
- JetBrains MPS: JetBrains MPS es un entorno de desarrollo integrado (IDE) para crear DSLs. Se autodenomina como un editor proyectual que almacena un documento como su estructura de árbol abstracta subyacente. (Este concepto también lo utilizan programas como Microsoft Word.) JetBrains MPS también admite la generación de código a Java, C, JavaScript o XML.
- Los DSL no son GPL. Intenta abordar rangos limitados de problemas en el dominio definitivo.
- No necesitas definir tu propio DSL. Eso sería tedioso. Busque un DSL existente que resuelva su necesidad en sitios como DSLFIN, que enumera DSLs para el dominio de las finanzas. Si no puede encontrar un DSL adecuado, podría definir el suyo propio.
- Es mejor hacer DSLs «como el inglés» en lugar de demasiado técnicos.
- La generación de código a partir de un DSL no es obligatoria, pero ofrece ventajas significativas y productivas cuando se hace.
- Los DSLs se llaman lenguajes pero, a diferencia de los GPLs, no necesitan ser ejecutables. Ser ejecutable no es la intención de un DSL.
- Los DSLs pueden ser escritos con procesadores de texto. Sin embargo, el uso de un editor de DSL facilita la comprobación de la sintaxis y la semántica.
Sí, los límites entre DSL y GPL a veces se difuminan.
Ejemplos de DSL
Algunos lenguajes utilizados para DSLs incluyen:
¿Por qué DSL?
El propósito de un DSL es capturar o documentar los requisitos y el comportamiento de un dominio. El uso de un DSL puede ser aún más estrecho para aspectos particulares dentro del dominio (por ejemplo, el comercio de productos básicos en las finanzas). Las DSL unen a los equipos empresariales y técnicos. Esto no implica que un DSL sea sólo para uso empresarial. Por ejemplo, los diseñadores y desarrolladores pueden utilizar un DSL para representar o diseñar una aplicación.
Un DSL también puede utilizarse para generar código fuente para un dominio o problema abordado. Sin embargo, la generación de código a partir de un DSL no se considera obligatoria, ya que su propósito principal es el conocimiento del dominio. Sin embargo, cuando se utiliza, la generación de código es una seria ventaja en la ingeniería de dominios.
Pros y contras de los DSL
En el lado positivo, los DSL son poderosos para capturar los atributos de un dominio. Además, como los DSL son pequeños, son fáciles de aprender y utilizar. Por último, un DSL ofrece un lenguaje para los expertos en el dominio y entre los expertos en el dominio y los desarrolladores.
En el lado negativo, un DSL se utiliza de forma limitada dentro del dominio y el propósito previstos. Además, un DSL tiene una curva de aprendizaje, aunque puede no ser muy alta. Además, aunque el uso de herramientas para la captura de DSL puede tener ventajas, no son esenciales, y el desarrollo o la configuración de dichas herramientas supone un esfuerzo añadido. Por último, los creadores de DSL necesitan conocimientos del dominio así como del desarrollo del lenguaje, y los individuos raramente tienen ambos.
Opciones de software DSL
Las opciones de software DSL de código abierto incluyen:
Mejores prácticas de DSL
¿Quieres utilizar un DSL? Aquí tienes algunos consejos: