I would like to view this page in
Un Lenguaje de dominio específico es un lenguaje de programación con un nivel superior de abstracción optimizado para una clase específica de problemas. Un DSL usa los conceptos y reglas de su campo o dominio.
Un lenguaje de dominio específico normalmente es menos complejo que un lenguaje de propósito general, como Java, C o Ruby. Generalmente, los DSL se desarrollan en estrecha coordinación con los expertos del campo para el que se diseña. En muchos casos, los DSL están destinados no para ser usados por expertos en software, sino por no programadores que son versados en el dominio de aplicación del DSL.
Usar DSL ofrece múltiples beneficios. El beneficio más evidente de usar DSL es que, una vez que tiene un lenguaje y un motor de transformación, su trabajo en el aspecto particular del desarrollo de software cubierto por el DSL se vuelve mucho más eficiente, simplemente porque no tiene que hacer el trabajo pesado manualmente. Si está generando código fuente desde su programa DSL (a diferencia de interpretarlo), puede usar abstracciones agradables y específicas para el dominio sin pagar con sobrecargas en tiempo de ejecución, porque el generador, al igual que un compilador, puede quitar las abstracciones y generar código eficiente.
Si tiene una forma de expresar cuestiones sobre un dominio en un lenguaje que está estrechamente alineado con el dominio, sus pensamientos se vuelven más claros, porque el código que escribe no está saturado con detalles de implementación. En otras palabras, usar DSL le permite separar lo esencial de la complejidad incidental.
Los DSL, cuyo dominio, abstracciones y notaciones están íntimamente alineados con la forma en que los expertos del dominio (es decir, no programadores) se expresan, permiten una excelente integración entre los expertos en TI y los expertos en el dominio.
Usar DSL y un motor de ejecución permite que la lógica de aplicación expresada en el código DSL sea independiente de la plataforma de destino. Usar DSL puede mejorar la calidad del producto creado: menos errores, mejor cumplimiento de la arquitectura y un mantenimiento más sencillo. Este es el resultado de eliminar grados (innecesarios) de libertad, evitar la duplicación de código y automatizar el trabajo repetitivo.
Hay básicamente dos formas distintas de integrar el código tradicional con el código DSL. La primera mantiene el código DSL y el regular en archivos separados. Luego, un generador de código transforma el código DSL en código de lenguaje de programación o, alternativamente, el programa carga el código de dominio específico y lo ejecuta. Este primer enfoque, con el código de lenguaje de propósito general (GPL) separado del código DSL se denomina DSL externo. Puede pensar en SQL como un ejemplo de un DSL externo.
Un enfoque alternativo mezcla el código DSL con código de propósito general en el mismo archivo de programa, lo que logra una integración mucho más estrecha entre ambos. El DSL reutiliza la gramática y el analizador del GPL y aprovecha las opciones de extensión disponibles del lenguaje base. Para estos escenarios se utiliza el término DSL interno.
Vale la pena mencionar que algunos GPL son más adecuados para la extensión que otros.
Ambos enfoques pueden tener sentido, dependiendo de las circunstancias, y MPS admite ambos.
La estructura y sintaxis de un DSL se definió escribiendo código en el lenguaje al que se incrusta el código DSL. Usualmente los IDE no se enteraban de los DSL, por lo que no ofrecían compatibilidad (finalización de código, detección de errores a medida, etc.). Sin embargo, con MPS usted usa la estructura de trabajo MPS con sus DSL especializados para el desarrollo de lenguaje para definir extensiones de lenguaje. Así, el IDE sabe de ellos, y el sistema puede brindar compatibilidad total con el IDE a los lenguajes de dominio específico incluidos.
Sergey Dmitriev, fundador y primer consejero delegado de JetBrains y «padre» de MPS, acuñó el término programación orientada al lenguaje en su artículo de 2004 Language Oriented Programming: The Next Programming Paradigm (Programación orientada al lenguaje: El próximo paradigma de programación). Otros han desarrollado ideas similares, normalmente con nombres diferentes; por ejemplo Charles Simonyi y su enfoque de programación intencional. Martin Fowler describió el enfoque en su artículo de 2005 Language Workbenches: The Killer-App for Domain Specific Languages?.
La idea central es que no usamos un solo lenguaje al desarrollar software, sino que usamos los lenguajes que se ajustan mejor a cada una de las tareas. En contraste con la programación políglota, que en la superficie aboga por un enfoque similar, la programación orientada al lenguaje anima explícitamente a los desarrolladores a construir sus propios DSL, o a extender lenguajes existentes con conceptos de dominio específico como parte del enfoque. Para hacer esto posible, los workbench de lenguaje tales como MPS son un ingrediente importante del enfoque orientado a lenguaje.
Con los MPS, puede definir un editor personalizado para que cualquier lenguaje nuevo, para así simplificar el uso de los DSL. Incluso los expertos del dominio, que no están familiarizados con la programación tradicional, pueden trabajar con facilidad en MPS, con lenguajes de dominio específico diseñados con la propia terminología de ese dominio.
En el siguiente vídeo podrá ver un ejemplo de cómo se creo con MPS un sistema de respuesta de voz interactiva (IVR). Este DSL apunta a personas no técnicas, para adaptar a ellos la experiencia de usuario.