Articulo de referencia

Lenguaje específico del dominio

Un lenguaje específico de dominio ( DSL ) es un lenguaje informático especializado en un dominio de aplicación específico . Esto contrasta con un lenguaje de propósito general (...

Un lenguaje específico de dominio ( DSL ) es un lenguaje informático especializado en un dominio de aplicación específico . Esto contrasta con un lenguaje de propósito general (GPL), que es ampliamente aplicable a diversos dominios. Existe una gran variedad de DSL, desde lenguajes ampliamente utilizados en dominios comunes, como HTML para páginas web, hasta lenguajes utilizados por solo uno o pocos programas, como el código blando MUSH . Los DSL se pueden subdividir según el tipo de lenguaje e incluyen lenguajes de marcado específicos de dominio , lenguajes de modelado específicos de dominio (o, 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 popularizado debido al auge 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 minilenguajes .

La línea divisoria entre lenguajes de propósito general y lenguajes específicos de dominio no siempre es nítida, ya que un lenguaje puede tener características especializadas para un dominio determinado, pero ser aplicable de forma más general, o viceversa, puede ser capaz de una amplia aplicación en principio, pero en la práctica se utiliza principalmente para un dominio específico. Por ejemplo, Perl se desarrolló originalmente como un lenguaje de procesamiento de texto y de interconexión, para el mismo dominio que AWK y los scripts de shell , pero posteriormente se utilizó principalmente como un lenguaje de programación de propósito general. En cambio, PostScript es un lenguaje Turing-completo y, en principio, puede utilizarse para cualquier tarea, pero en la práctica se utiliza de forma restringida como lenguaje de descripción de páginas .

Usar

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 al 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 que lo soporte), en lugar de reutilizar un lenguaje existente, puede valer la pena si el lenguaje permite expresar un tipo específico de problema o solución con mayor claridad que un lenguaje existente y el tipo de problema en cuestión se repite con suficiente frecuencia. Pragmáticamente, un DSL puede especializarse en un dominio de problemas específico, una técnica de representación de problemas específica, una técnica de solución específica 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 específico y no está diseñado para resolver problemas fuera de él (aunque técnicamente sea posible). En cambio, los lenguajes de propósito general se crean para resolver problemas en muchos dominios. El dominio también puede ser un área de negocio. Algunos ejemplos de áreas de negocio incluyen:

  • pólizas de seguro de vida (desarrolladas internamente por una gran compañía de seguros)
  • simulación de combate
  • cálculo del salario
  • facturación

Un lenguaje específico de dominio se sitúa entre un lenguaje de programación pequeño y un lenguaje de scripting , y a menudo se utiliza de forma análoga a una biblioteca de programación . Los límites entre estos conceptos son bastante difusos, al igual que los límites entre los lenguajes de scripting y los lenguajes de propósito general.

En diseño e implementación

Los lenguajes específicos de dominio son lenguajes (o, a menudo, sintaxis o gramáticas definidas) con objetivos muy específicos en su 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 Genérico de Modelado 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 expresiones regulares que busca patrones en líneas de texto. La utilidad sed define una sintaxis para buscar y reemplazar expresiones regulares. A menudo, estos pequeños lenguajes se pueden usar juntos dentro de un intérprete de comandos para realizar tareas de programación más complejas.

La línea divisoria entre los lenguajes específicos de dominio y los lenguajes de scripting es algo difusa, pero los lenguajes específicos de dominio suelen carecer de funciones de bajo nivel para el acceso al sistema de archivos , el control entre procesos y otras funciones que caracterizan a los lenguajes de programación completos, sean de scripting o no. Muchos lenguajes específicos de dominio no se compilan a código de bytes o código ejecutable, sino a diversos tipos de objetos multimedia: GraphViz exporta a PostScript , formato de intercambio de gráficos ( GIF ), grupo conjunto de expertos en fotografía ( JPEG ), etc., mientras que Csound se compila a archivos de audio, y un lenguaje específico de dominio de trazado de rayos como Persistence of Vision Ray Tracer ( POV-Ray ) se 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, el acceso y la gestión de 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 considera un lenguaje completo, en parte debido a la prevalencia de la manipulación de bases de datos en la programación y al nivel de dominio necesario para ser un experto en el lenguaje.

Para difuminar aún más esta línea divisoria, muchos lenguajes específicos de dominio han expuesto API, a las que se puede acceder desde otros lenguajes de programación sin interrumpir el flujo de ejecución ni 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 dominio se expanden con el tiempo para incluir herramientas de programación completas, 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 Extensible Stylesheet Language Transformation ( XSLT ), diseñado específicamente para transformar un gráfico XML en otro, que se ha ampliado desde su creación para permitir (especialmente en su versión 2.0) diversas formas de interacción con el sistema de archivos, manipulación de cadenas y fechas, y tipado de datos.

En la ingeniería dirigida por modelos , se pueden encontrar muchos ejemplos de lenguajes específicos de dominio, como el Lenguaje de Restricciones de Objetos (OCL), un lenguaje para decorar modelos con aserciones, o el Lenguaje de Consulta/Vista/Transformación ( QVT ), un lenguaje de transformación específico de dominio. Sin embargo, lenguajes como el Lenguaje Unificado de Modelado (UML) suelen ser lenguajes de modelado de propósito general.

En resumen, una analogía resulta útil: un lenguaje muy limitado es como un cuchillo, que puede usarse de miles de maneras diferentes, desde cortar alimentos hasta la autodefensa. Un lenguaje específico de dominio es como un taladro eléctrico: una herramienta potente con una amplia variedad de usos, pero con un contexto específico: hacer agujeros. Un lenguaje de propósito general es un banco de trabajo completo, con diversas herramientas para realizar múltiples tareas. Los lenguajes específicos de dominio deberían ser utilizados por programadores que, al analizar su entorno de trabajo actual, se dan cuenta de que necesitan una herramienta mejor y encuentran que un lenguaje específico de dominio determinado les proporciona precisamente eso.

Temas de lenguaje específicos del dominio

Lenguajes específicos de dominio externos e integrados

Los DSL implementados mediante un intérprete o compilador independiente se denominan lenguajes específicos de dominio externos . Ejemplos conocidos incluyen TeX o AWK. Una categoría aparte, denominada lenguajes específicos de dominio integrados (o internos), se implementan normalmente dentro de un lenguaje anfitrión como una biblioteca y tienden a limitarse a la sintaxis de dicho lenguaje, aunque esto depende de las capacidades del mismo. [ 1 ]

Patrones de uso

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

  • Procesamiento con herramientas independientes, invocadas mediante operación directa del usuario, a menudo en la línea de comandos 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 macros de lenguajes de programación y que se convierten o expanden a un lenguaje anfitrión de propósito general en tiempo de compilación o en tiempo real.
  • ComoUn lenguaje específico de dominio integrado ( eDSL ) [ 4 ] , también conocido como lenguaje específico de dominio interno , es un DSL implementado como una biblioteca en un lenguaje de programación "anfitrión". El lenguaje específico de dominio integrado aprovecha la sintaxis, la semántica y el entorno del sistema 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 "anfitrión" para crear programas que generan código en el lenguaje de programación "destino". Se pueden combinar fácilmente varios eDSL en un solo programa y las funcionalidades del lenguaje anfitrión se pueden usar para extender un eDSL existente. Otras posibles ventajas de usar un eDSL son una mayor seguridad de tipos y mejores herramientas de entorno de desarrollo integrado (IDE). Ejemplos de eDSL: SQLAlchemy "Core", un eDSL SQL en Python ; JOOQ Object Oriented Querying (jOOQ), un eDSL SQL en Java ; Language Integrated Query (LINQ), una "sintaxis de método", un eDSL SQL en C#; y kotlinx.html, un eDSL HTML en Kotlin . [ 5 ]
  • Lenguajes específicos de dominio que se llaman (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 "anfitrión" para su posterior procesamiento; generalmente, un intérprete o máquina virtual para el lenguaje específico de dominio está integrado en la aplicación anfitriona (por ejemplo, cadenas de formato , un motor de expresiones regulares ).
  • Lenguajes específicos de dominio que están integrados en las aplicaciones de usuario (por ejemplo, lenguajes de macros dentro de las hojas de cálculo) [ 6 ] 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) ambas cosas.

Objetivos de diseño

Adoptar un enfoque de lenguaje específico de dominio para la ingeniería de software implica tanto riesgos como oportunidades. Un lenguaje específico de dominio bien diseñado logra encontrar el equilibrio adecuado entre ambos.

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

  • Los lenguajes específicos de dominio son menos completos.
  • Los lenguajes específicos de dominio son mucho más expresivos en su ámbito de aplicación.
  • Los lenguajes específicos de dominio deben presentar 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 guardar los datos antes de cerrar la ventana.
  • Edita el código cada vez que cambien los parámetros de la línea de comandos, ya que afectan al comportamiento del programa.

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:

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

Ejemplos

Ejemplos de lenguajes de programación específicos de dominio incluyen HTML , Logo para dibujo tipo lápiz, Verilog y VHDL lenguajes de descripción de hardware, MATLAB y GNU Octave para programación matricial, Mathematica , Maple y Maxima para matemáticas simbólicas , Specification and Description Language 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 Generic Eclipse Modeling System 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 , HashiCorp Configuration Language utilizado para Terraform y otras herramientas de HashiCorp, Puppet también tiene su propio lenguaje de configuración .

Lenguaje GameMaker

GML es un lenguaje específico de dominio utilizado por GameMaker Studio , diseñado para ayudar a los programadores principiantes a aprender los fundamentos de la programación con mayor facilidad. Funciona como una combinación de varios lenguajes, incluyendo Delphi , C++ y BASIC . La mayoría de las funciones GML, una vez compiladas, llaman a funciones de tiempo de ejecución escritas en el lenguaje específico de la plataforma de destino; por lo tanto, su implementación final permanece oculta para el usuario. El objetivo principal del lenguaje es reducir las barreras de entrada al desarrollo de videojuegos. El entorno de ejecución de GameMaker, que gestiona el bucle principal del juego y se encarga de la implementación de funciones, permite que un juego sencillo utilice solo unas pocas líneas de código en lugar de miles.

Lenguaje de marcado ColdFusion

El lenguaje de scripting asociado a ColdFusion es otro ejemplo de lenguaje específico de dominio para sitios web basados ​​en datos. Este lenguaje se utiliza para integrar 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 ColdFusion (CFML) incluye un conjunto de etiquetas que se pueden usar en páginas 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.

FilterMeister

FilterMeister es un entorno de programación, con un lenguaje basado en C, diseñado específicamente para crear complementos de filtros de procesamiento de imágenes compatibles con Photoshop . FilterMeister funciona como un complemento de Photoshop y puede cargar y ejecutar scripts, o compilarlos y exportarlos como complementos independientes. Si bien el lenguaje de FilterMeister reproduce una parte significativa del lenguaje y la biblioteca de funciones de C, solo incluye las características que se pueden usar en el contexto de los complementos de Photoshop y añade algunas características específicas útiles únicamente en este ámbito.

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.

La ingeniería de software utiliza

Existe un gran interés en los lenguajes específicos de dominio para mejorar la productividad y la calidad de la ingeniería de software . Estos lenguajes podrían proporcionar un conjunto robusto de herramientas para una ingeniería de software eficiente. Dichas herramientas están comenzando a integrarse en el desarrollo de sistemas de software críticos.

El Kit de herramientas para la reducción de costos de software [ 7 ] 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 explorador de gráficos de dependencias 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 con respecto a 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 que se basa principalmente en la creación, optimización y uso de lenguajes específicos de dominio.

Metacompiladores

Como complemento de la programación orientada a lenguajes y de todas las demás formas de lenguajes específicos de dominio, se encuentra la clase de herramientas de escritura de compiladores denominadas metacompiladores . Dicho compilador es útil para generar analizadores sintácticos y generadores de código para lenguajes específicos de dominio, y un metacompilador compila un metalenguaje específico de dominio diseñado específicamente para el ámbito 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 ingeniería y análisis de software. La metodología de metacompiladores se encuentra frecuentemente en sistemas de transformación de programas .

Entre los metacompiladores que desempeñaron un papel importante tanto en la ciencia de la computación como en la industria informática se incluyen META II , [ 8 ] y su descendiente TreeMeta . [ 9 ]

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

Unreal y Unreal Tournament presentaron un lenguaje llamado UnrealScript . Esto permitió desarrollar rápidamente modificaciones con respecto a su competidor Quake (que utilizaba el motor Id Tech 2 ). El motor Id Tech utilizaba código C estándar , lo que implicaba aprender y aplicar correctamente C, mientras que UnrealScript estaba optimizado para facilitar su uso y aumentar su eficiencia. De forma similar, juegos más recientes han introducido sus propios lenguajes específicos para el desarrollo. Otro ejemplo común es Lua para la programación de scripts.

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

Se han desarrollado diversos motores de reglas de negocio para automatizar las políticas y reglas de negocio utilizadas tanto en el sector público como en el privado. ILOG , Oracle Policy Automation , DTRules, Drools y otros ofrecen soporte para DSL (lenguajes específicos de dominio) diseñados para abordar diversos problemas. DTRules incluso define 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. 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, mediante reglas declarativas o tablas de decisión ), junto con alternativas a la sintaxis de programación que favorecen los lenguajes específicos de dominio (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 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 trabajo multiplataforma como Apache Thrift o Google Protocol Buffers .

Pepinillo

Gherkin es un lenguaje diseñado para definir casos de prueba que permiten verificar el comportamiento del software, sin especificar cómo se implementa dicho comportamiento. Está pensado para que usuarios no técnicos lo lean y utilicen mediante una sintaxis de lenguaje natural y un diseño orientado a líneas . Las pruebas definidas con Gherkin deben implementarse posteriormente en un lenguaje de programación general. De este modo, los pasos de un programa Gherkin actúan como una sintaxis para la invocación de métodos, accesible para usuarios 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 lenguaje y al nivel de abstracción del dominio del problema. La idea es que los propios expertos en el dominio puedan comprender, validar, modificar e incluso desarrollar programas en lenguajes específicos de dominio. Sin embargo, esto rara vez ocurre. [ 10 ]
  • Los lenguajes específicos de dominio permiten la validación a nivel de dominio. Siempre que las construcciones del lenguaje sean seguras, cualquier oración escrita con ellas puede considerarse segura.
  • Los lenguajes específicos de dominio pueden ayudar a trasladar el desarrollo de sistemas de información empresarial de los desarrolladores de software tradicionales al grupo, generalmente más numeroso, de expertos en el dominio que (a pesar de tener menos experiencia técnica) poseen un conocimiento más profundo del dominio. [ 11 ]
  • Los lenguajes específicos de dominio 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ñar, implementar y mantener un lenguaje y las herramientas necesarias para desarrollar con él: entorno de desarrollo integrado (IDE).
  • Encontrar, establecer y mantener el alcance adecuado.
  • Dificultad para equilibrar las ventajas y desventajas entre la especificidad del dominio y las construcciones de lenguajes 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 específicos de dominio no estándar similares, por ejemplo, un DSL utilizado en una compañía de seguros frente a un DSL utilizado en otra compañía de seguros. [ 12 ]
  • A los expertos en dominios no técnicos les puede resultar difícil escribir o modificar programas DSL por sí mismos [ 10 ].
  • Mayor dificultad para integrar el DSL con otros componentes del sistema informático; en comparación con la integración con un lenguaje de propósito general.
  • La baja oferta de expertos en un DSL específico tiende a elevar los costos laborales.
  • Es más difícil encontrar ejemplos de código.

Herramientas para el diseño de lenguajes específicos de dominio

  • JetBrains MPS es una herramienta para el diseño de lenguajes específicos de dominio. Utiliza edición proyectiva , lo que permite superar las limitaciones de los analizadores sintácticos y construir editores de DSL, como los que incluyen tablas y diagramas. Implementa programación orientada al lenguaje. MPS combina un entorno para la definición del lenguaje, un banco de trabajo para el lenguaje y un entorno de desarrollo integrado (IDE) para dichos lenguajes. [ 13 ]
  • MontiCore es un entorno de desarrollo 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. [ 14 ]
  • Xtext es un marco de software de código abierto para el desarrollo de lenguajes de programación y lenguajes específicos de dominio (DSL). A diferencia de los generadores de analizadores sintácticos estándar, Xtext genera no solo un analizador, sino también un modelo de clases para el árbol de sintaxis abstracta. Además, proporciona un IDE basado en Eclipse, completo y personalizable. [ 15 ] El proyecto se archivó en abril de 2023.
  • Racket es un conjunto de herramientas de lenguaje multiplataforma que incluye código nativo, compilador JIT y JavaScript, IDE (además de ser compatible con Emacs, Vim, VSCode y otros) y herramientas de línea de comandos diseñadas para facilitar la creación de lenguajes tanto específicos de dominio como de propósito general. [ 16 ] [ 17 ]

Véase también

Referencias

  1. Fowler, Martin; Parsons, Rebecca. "Domain Specific Languages" . Consultado el 6 de julio de 2019 .
  2. 1 2 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. 1 2 Diomidis Spinellis. Patrones de diseño notables para lenguajes específicos de dominio . 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. "kotlinx.html" . GitHub .
  6. Stinson, Craig (16 de abril de 1991). "Cómo crear la hoja de cálculo perfecta" . PC . págs. 101–164 . Recuperado el 14 de marzo de 2025 . 
  7. Heitmeyer, C. (1999). "Uso del conjunto de herramientas SCR* para especificar requisitos de software" (PDF) . Actas del 2.º Taller IEEE sobre Técnicas de Especificación Formal de Nivel Industrial . IEEE. págs. 12-13 . doi : 10.1109/WIFT.1998.766290 . ISBN  0-7695-0081-1. S2CID 16079058 . Archivado del original (PDF) el 19-07-2004. 
  8. 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 .  
  9. Carr, C. Stephen; Luther, David A.; Erdmann, Sherian (1969). "El sistema compilador-compilador TREE-META: un sistema meta compilador para Univac 1108 y General Electric 645" . Informe técnico de la Universidad de Utah RADC-TR-69-83 . Archivado del original el 1 de febrero de 2020.
  10. 1 2 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 .
  11. Aram, Michael; Neumann, Gustaf (2015-07-01). "Análisis multicapa del codesarrollo de sistemas de información empresarial" (PDF) . Journal of Internet Services and Applications . 6 (1). doi : 10.1186/s13174-015-0030-8 . S2CID 16502371 . 
  12. Miotto, Eric. "Sobre la integración de cuerpos de conocimiento científicos y específicos del dominio en la ingeniería dirigida por modelos" (PDF) . Archivado del original (PDF) el 24 de julio de 2011. Recuperado el 22 de noviembre de 2010 .
  13. "JetBrains MPS: Creador de lenguajes específicos de dominio" .
  14. "MontiCore" .
  15. "Xtext" .
  16. 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 .
  17. Flatt, Matthew (2012). "Creating Languages ​​in Racket" . Communications of the ACM . Recuperado el 8 de abril de 2012 .

Lecturas adicionales

  • 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 específicos de dominio". 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). "Gastando el dividendo de Moore". Communications of the 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 de Ruby y qué no lo es?" . C4Media . Consultado el 8 de septiembre de 2009 .
  • Fowler, Martin (2011). Lenguajes específicos de dominio . Addison-Wesley. ISBN 978-0-321-71294-3.
  • " Minilenguajes ", El arte de la programación Unix , por Eric S. Raymond
  • Martin Fowler habla sobre lenguajes específicos de dominio y entornos de desarrollo de lenguajes . También en una presentación en vídeo.
  • Lenguajes específicos de dominio: una bibliografía anotada. Archivado el 16 de marzo de 2016 en Wayback Machine.
  • "Compiladores de un día: Creación de un lenguaje de dominio específico pequeño usando OCaml" . www.venge.net . Archivado del original el 10 de junio de 2025.
  • 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 de dominio
  • La guía completa de lenguajes específicos de dominio (externos)
  • jEQN Archivado el 31/01/2021 en Wayback Machine , ejemplo de lenguaje específico de dominio interno para el modelado y la 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}}: Para citar una revista se requiere |journal=( ayuda )
  • Uso de Acceleo con GMF  : Generación de presentaciones a partir de un modelador DSL de mapas mentales. Archivado el 30/07/2016 en Wayback Machine.
  • UML frente a lenguajes específicos de dominio
  • Sagar Sen; et  al. (2009). "Poda de metamodelos". CiteSeerX 10.1.1.156.6008 . {{cite journal}}: Para citar una revista se requiere |journal=( ayuda )