Un lenguaje dedicado (en inglés, lenguaje de dominio específico o DSL ) es un lenguaje de programación cuyas especificaciones están diseñadas para cumplir con las limitaciones de un campo de aplicación específico . Se opone conceptualmente a los lenguajes de programación clásicos (o generalistas) como Java o C , que tienden a tratar con un conjunto de dominios. Sin embargo, no existe un consenso que defina con precisión qué es un idioma dedicado. Esta falta de una definición precisa de la naturaleza de un lenguaje específico dificulta la tarea de establecer una historia clara del origen del concepto.
En informática, los lenguajes dedicados se ocupan de varios campos informáticos (pilotos informáticos, informática científica, bases de datos) o tratan de varios otros campos en los que interviene la informática ( medicina , aeronáutica ). El uso de un lenguaje dedicado no es específico de las computadoras, existen lenguajes dedicados a los campos de la medicina, la cocina, etc. .
La construcción de lenguajes dedicados es fundamentalmente diferente a la de una lengua clásica. El proceso de desarrollo puede ser muy complejo. Su diseño requiere habilidades duales en el campo a tratar y en el desarrollo de TI. Ya sea un lenguaje interno o externo dedicado, la implementación de este tipo de lenguaje requiere el uso de un patrón de diseño . Hay patrones de diseño que describen la implementación tal como la describe Spinellis y, en cambio, describen las etapas del desarrollo del lenguaje. Estos dos enfoques, aunque basados en ideas diferentes, se complementan.
El uso de lenguajes dedicados tiene ventajas y desventajas en comparación con el uso de lenguajes generales. La justificación para el uso de idiomas específicos puede basarse en consideraciones tecnológicas o financieras. Por otro lado, las ventajas y desventajas no son las mismas si se trata de un lenguaje dedicado interno o externo.
Hay lenguajes dedicados en áreas distintas a la informática. Los más famosos son en particular:
También podemos encontrar diccionarios dedicados al lenguaje de la medicina, la cocina, la filosofía, etc. .
Un idioma dedicado a un dominio (en inglés : idioma específico del dominio o DSL) proporciona una notación orientada a este dominio de aplicación. Se basa en los conceptos y la funcionalidad del dominio en cuestión. Como tal, un lenguaje dedicado es una forma eficiente de describir y generar programas en un área específica.
Según Gilles Muller, un lenguaje dedicado es un lenguaje de programación específico para una familia de problemas determinados denominada "dominio". Le permite al programador asegurarse de que construye un lenguaje apropiado y que este lenguaje cumple con los requisitos específicos del dominio objetivo.
Deursen, Klint y Visser dan una definición más amplia. Un lenguaje dedicado es un lenguaje de programación o un lenguaje de especificación ejecutable que proporciona, a través de notaciones y abstracciones apropiadas , poder expresivo centrado en, y generalmente limitado a, un dominio específico.
Hay dos tipos de idiomas dedicados: idiomas dedicados internos, también llamados idiomas integrados, o idiomas integrados (en inglés : idioma integrado específico del dominio o DSEL) e idiomas dedicados externos.
Los primeros están destinados a ser utilizados dentro del código fuente de un programa, expresado en otro lugar en otro idioma al que se hace referencia como idioma anfitrión. Los lenguajes que se prestan bien a la recepción de un lenguaje incrustado son, por ejemplo: Lisp, Haskell, Tcl ...
Estos últimos no están pensados para expresiones adicionales en otro idioma. Los códigos fuente de los programas que permiten implementar son autónomos e independientes de cualquier otro lenguaje de programación.
Según Watt, el lenguaje dedicado debe tener ciertos criterios:
Un lenguaje dedicado puede evolucionar de acuerdo con la propia evolución del campo de aplicación. También sucede que un lenguaje dedicado evoluciona para convertirse en un lenguaje de programación generalista.
Los campos de aplicación de los lenguajes dedicados son muy variados. Sin embargo, estos lenguajes se crean para realizar una tarea específica. Los ejemplos de usos a continuación son solo una pequeña parte de los campos de aplicación de los lenguajes dedicados.
Ejemplo de generación de página web con HTML y PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <!-- entre les balises <?php ?>, du code PHP inclus dans du code HTML --> <title><?php echo 'Hello World'; ?></title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> </head> <body> <!-- entre les balises <?php ?>, du code PHP inclus dans du code HTML --> <p><?php echo 'Hello World'; ?></p> </body> </html>Ejemplo de consulta SQL en PHP.
<?php // Requete SQL à l'intérieur d'une variable PHP $query = "SELECT id, name FROM products ORDER BY name ;"; // PostgreSQL $result = pg_query($conn, $query); // MySQL $result = mysql_query($query); ?>No hay una historia real sobre los lenguajes dedicados porque no existe un consenso real sobre una definición exacta.
Los primeros lenguajes de programación ( Cobol , Lisp , Fortran ) se consideran en sí mismos lenguajes dedicados, aunque no se denominan como tales. Estos primeros lenguajes de programación estaban, de hecho, dedicados a un dominio de aplicación. Con el desarrollo de posibilidades de aplicación, los lenguajes han tendido a generalizarse. Al mismo tiempo, se siguió sintiendo la necesidad de lenguajes especializados para resolver necesidades específicas. Se encontraron varias soluciones:
El término "lenguaje dedicado" habría aparecido por primera vez en Septiembre de 1984, en una publicación de JM Neighbors. Luego encontramos la idea de un lenguaje dedicado con diferentes nombres, en particular “petit langue” ( Little language ) o incluso “micro language” en 1986. En 1996, se implementó una conceptualización del lenguaje dedicado. Los autores discuten en particular la visión de adoptar el enfoque entre "dominio como un mundo real" ( dominio como un mundo real ) o el enfoque de "dominio como un conjunto de sistemas" ( dominio como un conjunto de sistemas ) para modelar un idioma.
La realización de lenguajes dedicados es fundamentalmente diferente a la de los lenguajes de programación tradicionales. El proceso de desarrollo puede ser muy complejo. Requiere experiencia en el campo en cuestión, pero también conocimientos en el campo del diseño de lenguajes de programación.
En la práctica, el desarrollo de un lenguaje dedicado no es un simple proceso secuencial sino un proceso iterativo. Para que el lenguaje sea lo más cercano posible al dominio objetivo, la construcción requiere una doble habilidad (del dominio de la aplicación y del lenguaje de programación), o una estrecha colaboración entre el equipo de programadores y los expertos de los tratados. dominio.
Diomidis Spinellis (en) y Anthony M Sloane ofrecen patrones de diseño de lenguaje dedicados.
El método de caracterización de un lenguaje dedicado especifica que debe describirse de acuerdo con dos sintaxis:
Debe construirse utilizando estas dos partes, comenzando con el árbol de la sintaxis abstracta y complementando con una o más ramas de la sintaxis concreta.
Los patrones de Spinellis están principalmente vinculados a la implementación de lenguajes dedicados, a diferencia de los patrones de Sloane que clasifican las fases de desarrollo y construcción de un lenguaje dedicado. Spinellis ofrece ocho patrones de diseño para lenguajes dedicados, clasificados en tres tipos:
Patrones estructurales ( lenguajes integrados ( piggyback ) ) Estos patrones están interesados en las interacciones entre el idioma dedicado y los otros idiomas. Ofrece un lenguaje de programación como host de lenguaje dedicado. Patrones de comportamiento ( canalización ) Estos patrones tienen como objetivo resolver los problemas de composición de lenguajes dedicados. Un sistema se puede describir utilizando una familia de lenguajes dedicados en capas, el pipeline es más precisamente el elemento en el que se dividen la ejecución y la ejecución de las instrucciones de esta familia de lenguajes dedicados. Patrones creativos Los lenguajes dedicados son, por tanto, lenguajes de programación reales caracterizados por su propia sintaxis y semántica. La descripción de la sintaxis, diseño e implementación de estos lenguajes corresponde a los seis patrones creativos de Spinellis: Procesamiento léxico ( procesamiento léxico ) Este modelo de procesamiento léxico creativo ofrece una forma eficiente de diseñar e implementar la sintaxis de lenguajes dedicados; Extensión de idioma ( extensión de idioma ) Este patrón se utiliza para agregar nuevas funciones a un lenguaje dedicado existente. A menudo, un lenguaje existente puede satisfacer eficazmente una nueva necesidad con la adición de algunas funcionalidades nuevas a su kernel que lo convierten en un lenguaje básico; Lengua de especialización ( especialización lingüística ) Este patrón elimina o modifica las características de un lenguaje básico (o generalista) para formar un lenguaje dedicado; Transformación de fuente a fuente (transformación de fuente a fuente ) El programa de idioma dedicado se traduce a un programa equivalente en un idioma general, lo que permite reutilizar todas las herramientas vinculadas a este idioma sin tener que modificarlas; Representación de las estructuras de datos ( estructura de representación de datos ) Las estructuras complejas a veces son difíciles de expresar, el diseño de un lenguaje dedicado es una solución interesante para representar datos y estructuras complejas; Sistema frontal ( sistema frontal ) Este patrón gestiona la configuración y adaptación de las funcionalidades del sistema de lenguajes dedicados para limitarse a lo necesario para crear una determinada aplicación. Patrones de SloaneDiseñar un lenguaje dedicado es una tarea difícil, existen muchos enfoques relacionados principalmente con las limitaciones del dominio. Se han propuesto varias clasificaciones para comprender mejor las motivaciones y los límites de cada una de estas concepciones, como los patrones de Sloane que se clasifican según las fases del desarrollo del lenguaje. Las diferentes fases del desarrollo de Sloane son las siguientes:
Aparte de las especificidades de los diferentes idiomas, el uso de un idioma dedicado en comparación con el uso de idiomas generalistas tiene ventajas y desventajas.
Consulte Asuntos económicos para obtener más información sobre las implicaciones económicas.
Beneficios de los idiomas dedicados internos
Ventaja de los idiomas externos dedicados
El uso de lenguajes dedicados a un dominio implica diversas cuestiones económicas, como su coste de aprendizaje y su coste de mantenimiento.
Uno de los problemas económicos se refiere al tiempo dedicado a aprender el idioma. De hecho, el costo de aprender un idioma general puede amortizarse más fácilmente mediante la multiplicación de los campos de aplicación tratados. En el caso de un lenguaje dedicado, el campo de amortiguación es menor dependiendo del campo de aplicación. Es necesario poder medir la ganancia de productividad que genera su uso y determinar en qué medida esta ganancia compensa el tiempo de aprendizaje.
Por otro lado, también se discute el uso de idiomas dedicados en la enseñanza. Es posible ofrecer el aprendizaje de un idioma dedicado, que los estudiantes podrían utilizar para aprender otros idiomas generales. También es posible ofrecer el aprendizaje de varios idiomas generales para luego poder utilizar idiomas dedicados según el campo de aplicación.
El uso de un lenguaje dedicado implica su implementación. El costo inicial del desarrollo del lenguaje también debe tenerse en cuenta al medir el impacto económico. Paul Hudak (en) sugiere un enfoque para limitar este costo inicial. Este enfoque se basa en lenguajes dedicados integrados (internos). El principio es aprovechar la infraestructura y las herramientas del entorno de desarrollo de un lenguaje general.
Uno de los retos económicos es la mantenibilidad de los programas producidos, así como la posibilidad de desarrollo del lenguaje. De hecho, el costo de mantener un idioma dedicado es menor que el de un idioma general.
(en) Modelado del dominio de la organización: Informe técnico STARS-VC-A025 / 001/00, Synquiry Technologies,1996, 509 p. ( leer en línea )