Lenguaje específico del dominio

Lenguaje informático especializado en un conjunto particular de requisitos o funcionalidades

Un lenguaje específico de dominio ( DSL ) es un lenguaje informático especializado en un dominio de aplicación 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 suave MUSH . Los DSL se pueden subdividir aún más por el tipo de lenguaje e incluyen lenguajes de marcado específicos de dominio, lenguajes de modelado específicos de dominio (más generalmente, lenguajes de especificación ) y lenguajes de programación específicos de dominio . Los lenguajes informáticos de propósito especial siempre han existido en la era de la informática, pero el término "lenguaje específico de dominio" se ha vuelto más popular debido al auge del modelado específico de dominio . Los DSL más simples, particularmente los utilizados por una sola aplicación, a veces se denominan informalmente minilenguajes .

La línea entre lenguajes de propósito general y lenguajes de dominio específico no siempre es nítida, ya que un lenguaje puede tener características especializadas para un dominio 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 usarse principalmente para un dominio específico. Por ejemplo, Perl fue desarrollado originalmente como un lenguaje de procesamiento de texto y pegamento, para el mismo dominio que AWK y los scripts de shell , pero luego se usó principalmente como un lenguaje de programación de propósito general. Por el contrario, PostScript es un lenguaje Turing-completo y, en principio, se puede usar para cualquier tarea, pero en la práctica se usa estrictamente como un lenguaje de descripción de páginas .

Usar

El diseño y uso de DSLs apropiados es una parte clave de la ingeniería de dominios , 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. La programación orientada al lenguaje considera 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 para respaldarlo), 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 con mayor claridad de lo que permitiría un lenguaje existente y el tipo de problema en cuestión reaparece con suficiente frecuencia. Pragmáticamente, un DSL puede estar especializado en un dominio de problemas en particular, una técnica de representación de problemas en particular, una técnica de solución en particular u otros aspectos de un dominio.

Descripción general

Un lenguaje específico de dominio se crea específicamente para resolver problemas en un dominio en particular y no está pensado para poder resolver problemas fuera de él (aunque eso puede ser técnicamente posible). Por el contrario, los lenguajes de propósito general se crean para resolver problemas en muchos dominios. El dominio también puede ser un área de negocios. Algunos ejemplos de áreas de negocios incluyen:

  • pólizas de seguro de vida (desarrolladas internamente por una gran empresa de seguros)
  • simulación de combate
  • cálculo de salario
  • facturación

Un lenguaje específico de dominio se encuentra en algún punto intermedio entre un lenguaje de programación diminuto y un lenguaje de script , y se suele utilizar de forma análoga a una biblioteca de programación . Los límites entre estos conceptos son bastante difusos, al igual que el límite entre los lenguajes de script y los lenguajes de uso general.

En diseño e implementación

Los lenguajes específicos de dominio son lenguajes (o, a menudo, sintaxis o gramáticas declaradas) con objetivos muy específicos en cuanto a diseño e 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 de Eclipse , abstracciones programáticas, como el Marco de modelado de 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 difusa, 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 o de otro tipo. Muchos lenguajes específicos de dominio no compilan a código de bytes o código ejecutable, sino a varios tipos de objetos multimedia: GraphViz exporta a PostScript , GIF , JPEG , etc., donde Csound compila a archivos de audio, y un lenguaje específico de dominio de trazado de rayos como POV compila a archivos gráficos.

Lenguajes de definición de datos

Un lenguaje de definición de datos como SQL presenta un caso interesante: puede considerarse 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 script, 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 requerido para ser un experto en el lenguaje.

Para desdibujar aún más esta línea, muchos lenguajes específicos del dominio tienen API expuestas y se puede acceder a ellos desde otros lenguajes de programación sin interrumpir el flujo de ejecución o llamar a un proceso separado, y por lo tanto pueden funcionar como bibliotecas de programación.

Herramientas de programación

Algunos lenguajes específicos de un 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 un 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 ampliado desde su inicio para permitir (en particular en su versión 2.0) varias formas de interacción con el sistema de archivos, manipulación de cadenas y fechas y tipificación de datos.

En la ingeniería basada en 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, los lenguajes como UML suelen ser lenguajes de modelado de propósito general.

Para resumir, una analogía puede ser útil: un lenguaje muy pequeño es como un cuchillo, que puede usarse de miles de maneras diferentes, desde cortar comida hasta talar árboles. [ aclaración necesaria ] Un lenguaje específico de dominio es como un taladro eléctrico: es una herramienta poderosa con una amplia variedad de usos, pero un contexto específico, a saber, hacer agujeros en cosas. Un lenguaje de propósito general es un banco de trabajo completo, con una variedad de herramientas destinadas a realizar una variedad de tareas. Los lenguajes específicos de dominio deberían ser utilizados por programadores que, al observar su banco de trabajo actual, se dan cuenta de que necesitan un taladro mejor y descubren que un lenguaje específico de dominio en particular proporciona exactamente eso. [ cita requerida ]

Temas lingüísticos específicos del dominio

Lenguajes específicos de dominio externos e integrados

Los DSL implementados a través de un intérprete o compilador independiente se conocen como lenguajes específicos de dominio externos . Algunos ejemplos conocidos son TeX o AWK. Una categoría separada conocida como lenguajes específicos de dominio integrados (o internos) se implementa normalmente dentro de un lenguaje anfitrión como una biblioteca y tiende a estar limitada a la sintaxis del lenguaje anfitrión, aunque esto depende de las capacidades del lenguaje anfitrión. [1]

Patrones de uso

Existen varios patrones de uso para lenguajes específicos de dominio: [2] [3]

  • Procesamiento con herramientas independientes, invocadas a través de la operación directa del usuario, a menudo en la línea de comando o desde un Makefile (por ejemplo, grep para coincidencia de expresiones regulares, sed, lex, yacc, el conjunto de herramientas GraphViz , etc.)
  • Lenguajes específicos de dominio que se implementan utilizando sistemas de macro lenguajes de programación y que se convierten o expanden en un lenguaje host de propósito general en tiempo de compilación o en tiempo real.
  • ComoLenguaje específico de dominio integrado ( eDSL ) [4] también conocido como lenguaje específico de dominio interno , es un DSL que se implementa como una biblioteca en un lenguaje de programación "host". El lenguaje específico de dominio integrado aprovecha la sintaxis, la semántica y el entorno de ejecución (secuenciación, condicionales, iteración, funciones, etc.) y agrega primitivas específicas de dominio que permiten a los programadores usar el lenguaje de programación "host" para crear programas que generan código en el lenguaje de programación "objetivo". Múltiples eDSL se pueden combinar fácilmente en un solo programa y las facilidades del lenguaje host se pueden usar para extender un eDSL existente. Otras posibles ventajas de usar un eDSL son una seguridad de tipo mejorada y mejores herramientas IDE . Ejemplos de eDSL: SQLAlchemy "Core" un eDSL SQL en Python , jOOQ un eDSL SQL en Java , la "sintaxis de método" de LINQ un eDSL SQL en C# y kotlinx.html un eDSL HTML en Kotlin .
  • Lenguajes específicos de dominio que son llamados (en tiempo de ejecución) desde programas escritos en lenguajes de propósito general como C o Perl , para realizar una función específica, a menudo devolviendo los resultados de la operación al lenguaje de programación "host" para su posterior procesamiento; generalmente, un intérprete o una máquina virtual para el lenguaje específico de dominio está integrado en la aplicación host (por ejemplo, cadenas de formato, un motor de expresiones regulares )
  • Lenguajes específicos de dominio que están integrados en aplicaciones de usuario (por ejemplo, lenguajes macro dentro de hojas de cálculo) y que (1) se utilizan para ejecutar código escrito por los usuarios de la aplicación, (2) son generados dinámicamente por la aplicación o (3) ambos.

Muchos lenguajes específicos de dominio se pueden utilizar de más de una manera. [ cita requerida ] El código DSL incrustado en un lenguaje host puede tener soporte de sintaxis especial, como expresiones regulares en sed, AWK, Perl o JavaScript, o puede pasarse como cadenas.

Objetivos de diseño

La adopción de un enfoque de ingeniería de software basado en un lenguaje específico de dominio implica riesgos y oportunidades. Un lenguaje específico de dominio bien diseñado logra encontrar el equilibrio adecuado entre ambos.

Los lenguajes de dominio específico tienen objetivos de diseño importantes que contrastan con los de los lenguajes de propósito general:

  • Los lenguajes de dominio específico son menos completos.
  • Los lenguajes de dominio específico son mucho más expresivos en su dominio.
  • Los lenguajes específicos de un dominio deberían exhibir una redundancia mínima .

Modismos

En programación, los modismos son métodos impuestos por los programadores para manejar tareas de desarrollo comunes, por ejemplo:

  • Asegúrese de que los datos se guarden antes de cerrar la ventana.
  • Edite el código siempre que cambien los parámetros de la línea de comandos porque afectan el comportamiento del programa.

Los lenguajes de programación de propósito general rara vez admiten dichos modismos, pero los lenguajes de dominio específico pueden describirlos, por ejemplo:

  • Un script puede guardar datos automáticamente.
  • Un lenguaje específico de dominio puede parametrizar la entrada de la línea de comandos.

Ejemplos

Entre los ejemplos de lenguajes de programación específicos del dominio se incluyen HTML , Logo para dibujos similares a lápices, los 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 , el 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 sintácticos , expresiones regulares para especificar analizadores léxicos , el sistema de modelado genérico Eclipse para crear lenguajes de diagramación, Csound para síntesis de sonido y música, y los lenguajes de entrada de GraphViz y GrGen , paquetes de software utilizados para el diseño y la reescritura de gráficos , el lenguaje de configuración de Hashicorp utilizado para Terraform y otras herramientas de Hashicorp , Puppet también tiene su propio lenguaje de configuración.

Lenguaje GameMaker

El lenguaje de programación 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 funciona como una mezcla de varios lenguajes, incluidos Delphi , C++ y BASIC . La mayoría de las funciones en ese lenguaje, después de compilarse, de hecho llaman a funciones de tiempo de ejecución escritas en un lenguaje específico para la plataforma de destino, por lo que su implementación final no es visible para el usuario. El lenguaje sirve principalmente para que sea fácil para cualquiera aprender el lenguaje y desarrollar un juego, y gracias al tiempo de ejecución GM que maneja el bucle principal del juego y mantiene la implementación de las funciones llamadas, se requieren pocas líneas de código para el juego más simple, en lugar de miles.

Lenguaje de marcado ColdFusion

El lenguaje de programación asociado de ColdFusion es otro ejemplo de lenguaje específico de dominio para sitios web basados ​​en datos. Este lenguaje de programación se utiliza para combinar lenguajes y servicios como Java, .NET, C++, SMS, correo electrónico, servidores de correo electrónico, http, ftp, exchange, 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 usar en páginas de ColdFusion para interactuar con fuentes de datos, manipular datos y mostrar resultados. La sintaxis de las etiquetas CFML es similar a la sintaxis de los elementos HTML.

Maestro de filtros

FilterMeister es un entorno de programación, con un lenguaje de programación basado en C, cuyo propósito específico es crear complementos de filtros de procesamiento de imágenes compatibles con Photoshop ; FilterMeister se ejecuta como un complemento de Photoshop en sí mismo y puede cargar y ejecutar scripts o compilarlos y exportarlos como complementos independientes. Aunque el lenguaje FilterMeister reproduce una parte importante 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.

Plantillas de MediaWiki

La función Plantilla de MediaWiki es un lenguaje integrado de dominio específico cuyo propósito fundamental es respaldar la creación de plantillas de páginas y la transclusión (inclusión por referencia) de páginas de MediaWiki en otras páginas de MediaWiki.

Usos de la ingeniería de software

Ha habido mucho interés en los lenguajes específicos de dominio para mejorar la productividad y la calidad de la ingeniería de software . Los lenguajes específicos de dominio podrían proporcionar un conjunto sólido de herramientas para una ingeniería de software eficiente. Dichas herramientas están comenzando a abrirse camino en el desarrollo de sistemas de software críticos.

Un ejemplo de esto es el kit de herramientas de reducción de costos de software [5] . 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 demostrador de teoremas para verificar las propiedades del programa contra 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 del dominio.

Metacompiladores

Como complemento a la programación orientada al lenguaje , así como a todas las demás formas de lenguajes de dominio específico, se encuentra la clase de herramientas de escritura de compiladores denominadas metacompiladores . Un metacompilador no solo es útil para generar analizadores sintácticos y generadores de código para lenguajes de dominio específico, sino que un metacompilador compila por sí mismo un metalenguaje de dominio específico 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 de metacompiladores se encuentra a menudo en sistemas de transformación de programas .

Los metacompiladores que desempeñaron un papel importante tanto en la ciencia informática como en la industria informática incluyen Meta-II , [6] y su descendiente TreeMeta . [7]

Unreal Engine antes de la versión 4 y otros juegos

Unreal y Unreal Tournament presentaron un lenguaje llamado UnrealScript . Esto permitió un rápido desarrollo de modificaciones en comparación con el competidor Quake (que utilizaba el motor Id Tech 2 ). El motor Id Tech utilizaba código C estándar , lo que significa que C debía aprenderse y aplicarse 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 ]

Motores de reglas para la automatización de políticas

Se han desarrollado varios motores de reglas de negocios para automatizar las políticas y las reglas de negocios 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 respaldar varios dominios de problemas. DTRules llega al punto de definir una interfaz para el uso de múltiples DSL dentro de un conjunto de reglas.

El objetivo de los motores de reglas de negocio es definir una representación de la lógica de negocio de la forma más legible posible para los humanos. Esto permite que tanto los expertos en la materia como los desarrolladores trabajen con la misma representación de la lógica de negocio y la comprendan. La mayoría de los motores de reglas ofrecen un enfoque para simplificar las estructuras de control de la lógica de negocio (por ejemplo, utilizando reglas declarativas o tablas de decisiones ) junto con alternativas a la sintaxis de programación a favor de los DSL.

Lenguajes de modelado estadístico

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.

Generar modelos y servicios para múltiples lenguajes de programación

Generar manejo de objetos y servicios basados ​​en un lenguaje de descripción de interfaz para un lenguaje específico del dominio como JavaScript para aplicaciones web, HTML para documentación, C++ para código de alto rendimiento, etc. Esto se hace mediante marcos de trabajo multilenguaje como Apache Thrift o Google Protocol Buffers .

Pepinillo

Gherkin es un lenguaje diseñado para definir casos de prueba para comprobar el comportamiento del software, sin especificar cómo se implementa ese comportamiento. Está pensado para que lo lean y lo utilicen 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 luego en un lenguaje de programación general. Luego, los pasos de un programa Gherkin actúan como una sintaxis para la invocación de métodos accesible para los no desarrolladores.

Otros ejemplos

Otros ejemplos destacados de lenguajes específicos de dominio incluyen:

Ventajas y desventajas

Algunas de las ventajas: [2] [3]

  • Los lenguajes específicos de dominio permiten expresar soluciones en el idioma y en el nivel de abstracción del dominio del problema. La idea es que los propios expertos en el dominio puedan comprender, validar, modificar y, a menudo, incluso desarrollar programas en lenguajes específicos de dominio. Sin embargo, esto rara vez sucede. [8]
  • Los lenguajes específicos de dominio permiten la validación a nivel de dominio. Mientras las construcciones del lenguaje sean seguras, cualquier oración escrita con ellas puede considerarse segura. [ cita requerida ]
  • Los lenguajes específicos de dominio pueden ayudar a trasladar el desarrollo de sistemas de información empresarial desde los desarrolladores de software tradicionales al grupo típicamente más grande de expertos en el dominio que (a pesar de tener menos experiencia técnica) tienen un conocimiento más profundo del dominio. [9]
  • Los lenguajes de dominio específico son más fáciles de aprender, dado su alcance limitado.

Algunas de las desventajas:

  • Costo de aprender un nuevo idioma
  • Aplicabilidad limitada
  • Costo de diseño, implementación y mantenimiento de un lenguaje específico de dominio, así como las herramientas necesarias para desarrollar con él ( IDE )
  • Encontrar, establecer y mantener el alcance adecuado.
  • Dificultad para equilibrar las compensaciones entre la especificidad del dominio y las construcciones del lenguaje de programación de propósito general.
  • Posible pérdida de eficiencia del procesador en comparación con el software codificado manualmente.
  • Proliferación de lenguajes similares no estándar específicos de un dominio, por ejemplo, un DSL utilizado dentro de una compañía de seguros frente a un DSL utilizado dentro de otra compañía de seguros. [10]
  • A los expertos en dominios no técnicos les puede resultar difícil escribir o modificar programas DSL por sí mismos. [8]
  • Mayor dificultad de integración del DSL con otros componentes del sistema de TI (en comparación con la integración con un lenguaje de propósito general).
  • La baja oferta de expertos en un DSL particular tiende a aumentar los costos laborales.
  • Es más difícil encontrar ejemplos de código.

Herramientas para diseñar lenguajes específicos de dominio

  • JetBrains MPS es una herramienta para diseñar lenguajes específicos de dominio. Utiliza edición proyectiva que permite superar los límites de los analizadores de lenguajes y construir editores DSL, como los que tienen tablas y diagramas. Implementa programación orientada al lenguaje. MPS combina un entorno para la definición de lenguajes, un entorno de trabajo de lenguajes y un entorno de desarrollo integrado (IDE) para dichos lenguajes. [11]
  • MontiCore es un entorno de trabajo de lenguajes para el desarrollo eficiente de lenguajes específicos de dominio. Procesa un formato de gramática extendida que define el DSL y genera componentes Java para procesar los documentos DSL. [12]
  • Xtext es un marco de software de código abierto para desarrollar lenguajes de programación y lenguajes específicos de dominio (DSL). A diferencia de los generadores de analizadores sintácticos estándar, Xtext no solo genera un analizador sintáctico, sino también un modelo de clase para el árbol de sintaxis abstracta. Además, proporciona un IDE basado en Eclipse personalizable y con todas las funciones. [13] El proyecto se archivó en abril de 2023.
  • Racket es una cadena de herramientas de lenguaje multiplataforma que incluye código nativo, compilador JIT y Javascript, IDE (además de soportar Emacs, Vim, VSCode y otros) y herramientas de línea de comandos diseñadas para permitir la creación de lenguajes de dominio específico y de propósito general. [14] [15]

Véase también

Referencias

  1. ^ Fowler, Martin; Parsons, Rebecca. "Lenguajes específicos de dominio" . Consultado el 6 de julio de 2019 .
  2. ^ por Marjan Mernik, Jan Heering y Anthony M. Sloane. Cuándo y cómo desarrollar lenguajes específicos de dominio. ACM Computing Surveys , 37(4):316–344, 2005. doi :10.1145/1118890.1118892
  3. ^ ab Diomidis Spinellis. Patrones de diseño notables para lenguajes de dominio específico. Journal of Systems and Software , 56(1):91–99, febrero de 2001. doi :10.1016/S0164-1212(00)00089-3
  4. ^ Felleisen, Matías; Findler, Robert Bruce; Flatt, Mateo; Krishnamurthi, Shriram; Barzilay, Eli; McCarthy, Jay; Tobin-Hochstadt, Sam (marzo de 2018). "Un lenguaje de programación programable". Comunicaciones de la ACM . 61 (3): 62–71. doi :10.1145/3127323. S2CID  3887010 . Consultado el 15 de mayo de 2019 .
  5. ^ Heitmeyer, C. (1999). "Uso del conjunto de herramientas SCR* para especificar los requisitos de software" (PDF) . Actas. 2.º taller IEEE sobre técnicas de especificación formal de resistencia industrial . IEEE. págs. 12-13. doi :10.1109/WIFT.1998.766290. ISBN . 0-7695-0081-1. S2CID  16079058. Archivado desde el original (PDF) el 19 de julio de 2004.
  6. ^ Shorre, DV (1964). "META II, un lenguaje de escritura de compiladores orientado a la sintaxis". Actas de la 19.ª conferencia nacional de la ACM de 1964. págs. 41.301–41.3011. doi :10.1145/800257.808896. S2CID  43144779.
  7. ^ Carr, C. Stephen; Luther, David A.; Erdmann, Sherian (1969). "El sistema compilador-compilador TREE-META: un sistema de compilador meta para Univac 1108 y General Electric 645". Informe técnico RADC-TR-69-83 de la Universidad de Utah . Archivado desde el original el 1 de febrero de 2020.
  8. ^ ab Freudenthal, Margus (1 de enero de 2009). "Lenguajes específicos de dominio en un sistema de información aduanera". IEEE Software : 1. doi :10.1109/MS.2009.152.
  9. ^ Aram, Michael; Neumann, Gustaf (1 de julio de 2015). "Análisis multicapa del codesarrollo de sistemas de información empresarial" (PDF) . Revista de servicios y aplicaciones de Internet . 6 (1). doi : 10.1186/s13174-015-0030-8 . S2CID  16502371.
  10. ^ Miotto, Eric. "Sobre la integración de conocimientos científicos y específicos de dominio en la ingeniería basada en modelos" (PDF) . Archivado desde el original (PDF) el 24 de julio de 2011. Consultado el 22 de noviembre de 2010 .
  11. ^ "JetBrains MPS: Creador de lenguajes de dominio específico".
  12. ^ "MontiCore".
  13. ^ "Xtexto".
  14. ^ Tobin-Hochstadt, S.; St-Amour, V.; Culpepper, R.; Flatt, M.; Felleisen, M. (2011). "Lenguajes como bibliotecas" (PDF) . Diseño e implementación de lenguajes de programación .
  15. ^ Flatt, Matthew (2012). "Creación de lenguajes en Racket". Comunicaciones de la ACM . Consultado el 8 de abril de 2012 .

Lectura adicional

  • Dunlavey (1994). Creación de mejores aplicaciones: una teoría del desarrollo eficiente de software . International Thomson Publishing . ISBN 0-442-01740-5.
  • Heitmeyer, Constance (1999). "Uso del conjunto de herramientas SCR* para especificar los requisitos del software" (PDF) . Actas. 2.º taller IEEE sobre técnicas de especificación formal de resistencia industrial . págs. 12-13. doi :10.1109/WIFT.1998.766290. ISBN . 0-7695-0081-1. S2CID  16079058. Archivado (PDF) del original el 1 de febrero de 2020.
  • Mernik, Marjan; Heering, Jan y Sloane, Anthony M. (2005). "Cuándo y cómo desarrollar lenguajes específicos de dominio". ACM Computing Surveys . 37 (4): 316–344. doi :10.1145/1118890.1118892. S2CID  207158373.
  • Spinellis, Diomidis (2001). "Patrones de diseño notables para lenguajes de dominio específico". Journal of Systems and Software . 56 (1): 91–99. doi :10.1016/S0164-1212(00)00089-3.
  • Parr, Terence (2007). La referencia definitiva de ANTLR: creación de lenguajes específicos de dominio . Pragmatic Bookshelf. ISBN 978-0-9787392-5-6.
  • Larus, James (2009). "Gastar el dividendo de Moore". Comunicaciones de la ACM . 52 (5): 62–69. doi :10.1145/1506409.1506425. ISSN  0001-0782. S2CID  2803479.
  • Werner Schuster (15 de junio de 2007). "¿Qué es un DSL Ruby y qué no lo es?". C4Media . Consultado el 8 de septiembre de 2009 .
  • Fowler, Martin (2011). Lenguajes de dominio específico . Addison-Wesley. ISBN 978-0-321-71294-3.
  • Brambilla, Marco; Cabot, Jordi; Wimmer, Manuel (2012). Ingeniería de software basada en modelos en la práctica . Synthesis Lectures on Software Engineering. Vol. #1. Morgan & Claypool. ISBN 978-1-62705-708-0.
  • "Minilenguajes", El arte de la programación en Unix , por Eric S. Raymond
  • Martin Fowler habla sobre lenguajes específicos de dominio y Language Workbench. También en una presentación en video
  • Lenguajes de dominio específico: una bibliografía comentada Archivado el 16 de marzo de 2016 en Wayback Machine
  • Compiladores de un día: creación de un pequeño lenguaje específico de dominio utilizando OCaml
  • Asociación Usenix: Conferencia sobre lenguajes específicos de dominio (DSL '97) y 2.ª Conferencia sobre lenguajes específicos de dominio (DSL '99)
  • Lenguajes internos específicos del dominio
  • La guía completa para lenguajes específicos de dominio (externos)
  • jEQN Archivado el 31 de enero de 2021 en Wayback Machine. Ejemplo de lenguaje interno específico de dominio para el modelado y simulación de redes de colas extendidas.
Artículos
  • DSL externos con tecnología Eclipse
  • "Construcción de lenguajes específicos de dominio sobre un marco de lenguaje". 1997. CiteSeerX  10.1.1.50.4685 . {{cite journal}}: Requiere citar revista |journal=( ayuda )
  • Uso de Acceleo con GMF: Generación de presentaciones desde un modelador DSL de MindMap Archivado el 30 de julio de 2016 en Wayback Machine
  • UML vs. lenguajes específicos de dominio
  • Sagar Sen; et al. (2009). "Poda de metamodelos". CiteSeerX  10.1.1.156.6008 . {{cite journal}}: Requiere citar revista |journal=( ayuda )
Obtenido de "https://es.wikipedia.org/w/index.php?title=Idioma_específico_del_dominio&oldid=1246190037"