Un lenguaje específico de dominio ( DSL ) es un lenguaje informático especializado en un dominio de aplicación en particular . Esto contrasta con un lenguaje de propósito general (GPL), que es ampliamente aplicable en todos los dominios. Existe una amplia variedad de DSL, que van desde lenguajes ampliamente utilizados para dominios comunes, como HTML para páginas web, hasta lenguajes utilizados por solo una o unas pocas piezas de software, como el código de software MUSH . DSL se pueden subdividir aún más por el tipo de lenguaje, e incluyen específicos de dominio de marcado idiomas , de dominio específico de modelado de idiomas (en términos más generales,lenguajes de especificación ) y lenguajes de programación específicos del dominio . Los lenguajes informáticos de propósito especial siempre han existido en la era informática, pero el término "lenguaje específico de dominio" se ha vuelto más popular debido al aumento del modelado específico de dominio . Los DSL más simples, en particular los utilizados por una sola aplicación, a veces se denominan informalmente mini-lenguajes .
La línea divisoria entre lenguajes de uso general y lenguajes de dominio específico no siempre es nítida, ya que un lenguaje puede tener características especializadas para un dominio en particular pero ser aplicable de manera más amplia, o por el contrario, puede, en principio, ser capaz de una amplia aplicación pero en la práctica utilizado principalmente para un dominio específico. Por ejemplo, Perl se desarrolló originalmente como un lenguaje de procesamiento de texto y pegamento, para el mismo dominio que AWK y los scripts de shell , pero más adelante se usó principalmente como un lenguaje de programación de propósito general. Por el contrario, PostScript es un lenguaje completo de Turing y, en principio, se puede utilizar para cualquier tarea, pero en la práctica se utiliza de forma limitada como lenguaje de descripción de páginas .
El diseño y uso de DSL apropiados es una parte clave de la ingeniería de dominio , mediante el uso de un lenguaje adecuado para el dominio en cuestión; esto puede consistir en usar un DSL o GPL existente, o desarrollar un nuevo DSL. Programación orientada al lenguajeconsidera la creación de lenguajes de propósito especial para expresar problemas como parte estándar del proceso de resolución de problemas. Crear un lenguaje específico de dominio (con software que lo soporte), en lugar de reutilizar un lenguaje existente, puede valer la pena si el lenguaje permite que un tipo particular de problema o solución se exprese más claramente de lo que permitiría un lenguaje existente y el tipo de El problema en cuestión reaparece con suficiente frecuencia. De manera pragmática, un DSL puede estar especializado en un dominio de problema particular, una técnica de representación de problema particular, una técnica de solución particular u otros aspectos de un dominio.
Un lenguaje de dominio específico se crea específicamente para resolver problemas en un dominio en particular y no está destinado a poder resolver problemas fuera de él (aunque eso puede ser técnicamente posible). Por el contrario, los lenguajes de uso general se crean para resolver problemas en muchos dominios. El dominio también puede ser un área comercial. Algunos ejemplos de áreas comerciales incluyen:
Un lenguaje de dominio específico se encuentra en algún lugar entre un lenguaje de programación diminuto y un lenguaje de scripting , y a menudo se usa de manera análoga a una biblioteca de programación . Los límites entre estos conceptos son bastante borrosos, al igual que el límite entre los lenguajes de scripting y los lenguajes de propósito general.
Los lenguajes de dominio específico son lenguajes (o, a menudo, sintaxis o gramáticas declaradas) con objetivos muy específicos en el diseño y la implementación. Un lenguaje específico de dominio puede ser un lenguaje de diagramación visual, como los creados por el Sistema de modelado genérico Eclipse , abstracciones programáticas, como el Marco de modelado Eclipse , o lenguajes textuales. Por ejemplo, la utilidad de línea de comandos grep tiene una sintaxis de expresión regular que coincide con patrones en líneas de texto. La utilidad sed define una sintaxis para hacer coincidir y reemplazar expresiones regulares. A menudo, estos pequeños lenguajes se pueden usar juntos dentro de un shell para realizar tareas de programación más complejas.
La línea entre lenguajes específicos de dominio y lenguajes de scripting es algo borrosa, pero los lenguajes específicos de dominio a menudo carecen de funciones de bajo nivel para el acceso al sistema de archivos, control entre procesos y otras funciones que caracterizan a los lenguajes de programación con todas las funciones, scripting u otros. Muchos lenguajes específicos de dominio no se compilan en código de bytes o código ejecutable, sino en varios tipos de objetos de medios: GraphViz exporta a PostScript , GIF , JPEG , etc., donde Csound se compila en archivos de audio y un dominio de trazado de rayos. lenguaje específico como POV se compila en archivos de gráficos. Un lenguaje informático como SQL presenta un caso interesante: se puede considerar un lenguaje específico de dominio porque es específico de un dominio específico (en el caso de SQL, acceder y administrar bases de datos relacionales), y a menudo se llama desde otra aplicación, pero SQL tiene más palabras clave y funciones que muchos lenguajes de scripting, y a menudo se lo considera un lenguaje por derecho propio, tal vez debido a la prevalencia de la manipulación de bases de datos en la programación y la cantidad de dominio que se requiere para ser un experto en el lenguaje.
Desdibujando aún más esta línea, muchos lenguajes específicos de dominio tienen API expuestas y se puede acceder a ellas desde otros lenguajes de programación sin interrumpir el flujo de ejecución o llamar a un proceso separado, y por lo tanto pueden operar como bibliotecas de programación.
Algunos lenguajes específicos de dominio se expanden con el tiempo para incluir herramientas de programación con todas las funciones, lo que complica aún más la cuestión de si un lenguaje es específico de dominio o no. Un buen ejemplo es el lenguaje funcional XSLT , diseñado específicamente para transformar un gráfico XML en otro, que se ha extendido desde sus inicios para permitir (particularmente en su versión 2.0) varias formas de interacción del sistema de archivos, manipulación de cadenas y fechas, y tipificación de datos. .
En la ingeniería impulsada por modelos , se pueden encontrar muchos ejemplos de lenguajes específicos de dominio como OCL , un lenguaje para decorar modelos con aserciones o QVT , un lenguaje de transformación específico de dominio. Sin embargo, lenguajes como UML suelen ser lenguajes de modelado de propósito general.
Para resumir, una analogía podría ser útil: un lenguaje muy pequeño es como un cuchillo, que se puede usar de miles de formas diferentes, desde cortar alimentos hasta talar árboles. Un lenguaje de dominio específico es como un taladro eléctrico: es una herramienta poderosa con una amplia variedad de usos, pero un contexto específico, es decir, poner agujeros en las cosas. Un lenguaje de propósito general es un banco de trabajo completo, con una variedad de herramientas diseñadas para realizar una variedad de tareas. Los programadores deben utilizar lenguajes específicos de dominio que, al observar su entorno de trabajo actual, se dan cuenta de que necesitan un mejor ejercicio y descubren que un lenguaje específico de dominio en particular proporciona exactamente eso.
Los DSL implementados a través de un intérprete o compilador independiente se conocen como lenguajes específicos de dominio externo . Los ejemplos bien conocidos incluyen LaTeX o AWK. Una categoría separada conocida como Lenguajes específicos de dominio incrustados (o internos) se implementan típicamente dentro de un idioma anfitrión como una biblioteca y tienden a estar limitadas a la sintaxis del idioma anfitrión, aunque esto depende de las capacidades del idioma anfitrión. [1]
Hay varios patrones de uso para idiomas específicos de dominio: [2] [3]
Muchos lenguajes de dominios específicos se pueden utilizar de más de una forma. [ cita requerida ] El código DSL incrustado en un lenguaje anfitrión puede tener soporte de sintaxis especial, como expresiones regulares en sed, AWK, Perl o JavaScript, o puede pasarse como cadenas.
Adoptar un enfoque de lenguaje específico de dominio para la ingeniería de software implica tanto riesgos como oportunidades. El lenguaje específico de dominio bien diseñado logra encontrar el equilibrio adecuado entre estos.
Los lenguajes de dominio específico tienen importantes objetivos de diseño que contrastan con los de los lenguajes de uso general:
En programación, los modismos son métodos impuestos por los programadores para manejar tareas de desarrollo comunes, por ejemplo:
Los lenguajes de programación de propósito general rara vez admiten tales modismos, pero los lenguajes específicos de dominio pueden describirlos, por ejemplo:
Ejemplos de lenguajes específicos de dominio incluyen HTML , Logo para dibujo a lápiz, lenguajes de descripción de hardware Verilog y VHDL , MATLAB y GNU Octave para programación matricial, Mathematica , Maple y Maxima para matemáticas simbólicas , lenguaje de especificación y descripción para sistemas reactivos y distribuidos, fórmulas y macros de hojas de cálculo , SQL para consultas de bases de datos relacionales , gramáticas YACC para crear analizadores ,expresiones regulares para especificar lexers , el Sistema de Modelado Eclipse genérico para crear lenguajes de creación de diagramas, CSound para los idiomas de entrada de sonido y la síntesis de la música, y GraphViz y GrGen , paquetes de software utilizados para el diseño gráfico y el gráfico de la reescritura , Hashicorp de configuración del idioma utilizado para Terraform y otra Herramientas Hashicorp , Puppet también tiene su propio lenguaje de configuración .
El lenguaje de secuencias de comandos GML utilizado por GameMaker Studio es un lenguaje específico de dominio dirigido a programadores novatos para que puedan aprender a programar fácilmente. Si bien el lenguaje sirve como una combinación de múltiples lenguajes, incluidos Delphi , C ++ y BASIC , faltan estructuras, tipos de datos y otras características de un lenguaje de programación completo. Muchas de las funciones integradas están en espacio aislado con el fin de facilitar la portabilidad. El idioma sirve principalmente para facilitar que cualquiera pueda aprender el idioma y desarrollar un juego.
El lenguaje de secuencias de comandos asociado de ColdFusion es otro ejemplo de un lenguaje específico de dominio para sitios web basados en datos. Este lenguaje de secuencias de comandos se utiliza para unir idiomas y servicios como Java, .NET, C ++, SMS, correo electrónico, servidores de correo electrónico, http, ftp, intercambio, servicios de directorio y sistemas de archivos para su uso en sitios web.
El lenguaje de marcado de ColdFusion (CFML) incluye un conjunto de etiquetas que se pueden utilizar en las páginas de ColdFusion para interactuar con fuentes de datos, manipular datos y mostrar la salida. La sintaxis de la etiqueta CFML es similar a la sintaxis de los elementos HTML.
La plataforma Erlang Open Telecom se diseñó originalmente para su uso dentro de Ericsson como un lenguaje específico de dominio. El lenguaje en sí ofrece una plataforma de bibliotecas para crear máquinas de estado finito, servidores genéricos y administradores de eventos que permiten rápidamente a un ingeniero implementar aplicaciones o bibliotecas de soporte, que se han demostrado en los puntos de referencia de la industria para superar a otros lenguajes destinados a un conjunto mixto de dominios. , como C y C ++. El idioma ahora es oficialmente de código abierto y se puede descargar desde su sitio web.
FilterMeister es un entorno de programación, con un lenguaje de programación basado en C, con el propósito específico de crear complementos de filtro de procesamiento de imágenes compatibles con Photoshop ; FilterMeister se ejecuta como un complemento de Photoshop y puede cargar y ejecutar scripts o compilarlos y exportarlos como complementos independientes. Aunque el lenguaje FilterMeister reproduce una parte significativa del lenguaje C y la biblioteca de funciones, contiene solo aquellas características que se pueden usar dentro del contexto de los complementos de Photoshop y agrega una serie de características específicas que solo son útiles en este dominio específico.
La función Plantilla de MediaWiki es un lenguaje específico de dominio integrado cuyo propósito fundamental es apoyar la creación de plantillas de página y la transclusión (inclusión por referencia) de páginas de MediaWiki en otras páginas de MediaWiki.
Ha habido mucho interés en los lenguajes de dominios específicos para mejorar la productividad y la calidad de la ingeniería de software . El lenguaje específico del dominio posiblemente podría proporcionar un conjunto sólido de herramientas para una ingeniería de software eficiente. Estas herramientas están comenzando a abrirse camino en el desarrollo de sistemas de software críticos.
El Kit de herramientas de reducción de costos de software [5] es un ejemplo de esto. El kit de herramientas es un conjunto de utilidades que incluye un editor de especificaciones para crear una especificación de requisitos , un navegador de gráficos de dependencia para mostrar dependencias de variables, un verificador de consistencia para detectar casos faltantes en fórmulas bien formadas en la especificación, un verificador de modelos y un probador de teoremas para comparar las propiedades del programa con la especificación y un generador de invariantes que construye automáticamente invariantes en función de los requisitos.
Un desarrollo más reciente es la programación orientada al lenguaje , una metodología de ingeniería de software integrada basada principalmente en la creación, optimización y uso de lenguajes específicos de dominio.
Complementando la programación orientada al lenguaje , así como todas las otras formas de lenguajes específicos de dominio, se encuentra la clase de herramientas de escritura de compiladores llamadas metacompiladores . Un metacompilador no solo es útil para generar analizadores sintácticos y generadores de código para lenguajes específicos de dominio, sino que un metacompilador en sí mismo compila un metalenguaje específico de dominio diseñado específicamente para el dominio de la metaprogramación .
Además de analizar lenguajes específicos de dominio, los metacompiladores son útiles para generar una amplia gama de herramientas de análisis e ingeniería de software. La metodología del metacompilador se encuentra a menudo en los sistemas de transformación de programas .
Los metacompiladores que jugaron un papel importante tanto en la informática como en la industria informática incluyen Meta-II , [6] y su descendiente TreeMeta . [7]
Unreal and Unreal Tournament dio a conocer un lenguaje llamado UnrealScript . Esto permitió un rápido desarrollo de modificaciones en comparación con el competidor Quake (utilizando el motor Id Tech 2 ). El motor Id Tech usaba código C estándar , lo que significa que C tenía que ser aprendido y aplicado correctamente, mientras que UnrealScript estaba optimizado para facilitar su uso y eficiencia. De manera similar, el desarrollo de juegos más recientes introdujo sus propios lenguajes específicos, un ejemplo más común es Lua para scripting. [ cita requerida ]
Se han desarrollado varios motores de reglas comerciales para automatizar las políticas y las reglas comerciales que se utilizan tanto en el gobierno como en la industria privada. ILOG , Oracle Policy Automation , DTRules , Drools y otros brindan soporte para DSL destinados a admitir varios dominios de problemas. DTRules va tan lejos como para definir una interfaz para el uso de múltiples DSL dentro de un conjunto de reglas.
El propósito de Business Rules Engines es definir una representación de la lógica empresarial de la manera más legible posible. Esto permite que tanto los expertos en la materia como los desarrolladores trabajen y comprendan la misma representación de la lógica empresarial. La mayoría de los motores de reglas proporcionan un enfoque para simplificar las estructuras de control de la lógica empresarial (por ejemplo, utilizando reglas declarativas o tablas de decisión ) junto con alternativas a la sintaxis de programación a favor de los DSL.
Los modeladores estadísticos han desarrollado lenguajes específicos de dominio como R (una implementación del lenguaje S ), Bugs , Jags y Stan . Estos lenguajes proporcionan una sintaxis para describir un modelo bayesiano y generan un método para resolverlo mediante simulación.
Genere manejo de objetos y servicios basados en un lenguaje de descripción de interfaz para un lenguaje específico de dominio, como JavaScript para aplicaciones web, HTML para documentación, C ++ para código de alto rendimiento, etc. Esto se realiza mediante marcos de idiomas cruzados como Apache Thrift o Búferes de protocolo de Google .
Gherkin es un lenguaje diseñado para definir casos de prueba para verificar el comportamiento del software, sin especificar cómo se implementa ese comportamiento. Está destinado a ser leído y utilizado por usuarios no técnicos utilizando una sintaxis de lenguaje natural y un diseño orientado a líneas . Las pruebas definidas con Gherkin deben implementarse en un lenguaje de programación general. Luego, los pasos en un programa Gherkin actúan como una sintaxis para la invocación de métodos accesible a los no desarrolladores.
Otros ejemplos destacados de lenguajes específicos de dominio incluyen:
Algunas de las ventajas: [2] [3]
Algunas de las desventajas:
Este artículo incluye una lista de referencias generales , pero permanece en gran parte sin verificar porque carece de suficientes citas en línea correspondientes . ( Septiembre de 2009 ) |
Esta sección de lectura adicional puede contener sugerencias inapropiadas o excesivas que pueden no seguir las pautas de Wikipedia . Asegúrese de que solo se brinden un número razonable de sugerencias de lectura adicionales equilibradas , temáticas , confiables y notables; eliminar las publicaciones menos relevantes o redundantes con el mismo punto de vista cuando corresponda. Considere utilizar textos apropiados como fuentes en línea o crear un artículo de bibliografía por separado . ( Febrero de 2020 ) |
|journal=
( ayuda )|journal=
( ayuda )