stringtranslate.com

Idioma específico del dominio

Un lenguaje de dominio específico ( 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 sólo uno o unos pocos programas de software, como el código software MUSH . Los DSL se pueden subdividir aún más según 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 las computadoras, 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 minilenguajes .

La línea entre los lenguajes de propósito general y los lenguajes de dominio específico no siempre es clara, 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 aplicación amplia pero en la práctica usarse 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 utilizó principalmente como un lenguaje de programación de propósito general. Por el contrario, PostScript es un lenguaje completo de Turing y, en principio, puede usarse para cualquier tarea, pero en la práctica se usa estrictamente 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 para el dominio en cuestión; esto puede consistir en usar un DSL o GPL existente, o desarrollar un DSL nuevo. La programación orientada a lenguajes considera la creación de lenguajes de propósito especial para expresar problemas como parte estándar del proceso de resolución de problemas. Puede valer la pena crear un lenguaje de dominio específico (con software que lo respalde), en lugar de reutilizar un lenguaje existente, 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. Pragmáticamente, 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.

Descripción general

Un lenguaje de dominio específico se crea específicamente para resolver problemas en un dominio en particular y no pretende 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 comercial. Algunos ejemplos de áreas de negocio incluyen:

Un lenguaje de dominio específico está en algún lugar entre un pequeño lenguaje de programación y un lenguaje de secuencias de comandos , y a menudo se usa de manera análoga a una biblioteca de programación . Los límites entre estos conceptos son bastante borrosos, muy parecidos a los límites entre los lenguajes de programación y los lenguajes de propósito general.

En diseño e implementación.

Los lenguajes de dominio específico son lenguajes (o, a menudo, sintaxis o gramáticas declaradas) con objetivos muy específicos en diseño e implementación. Un lenguaje de dominio específico puede ser un lenguaje de diagramación visual, como los creados por el Generic Eclipse Modeling System , abstracciones programáticas, como el Eclipse Modeling Framework , 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 los lenguajes de dominio específico y los lenguajes de secuencias de comandos es algo borrosa, pero los lenguajes de dominio específicos a menudo carecen 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 con todas las funciones, ya sean secuencias de comandos o de otro tipo. Muchos lenguajes de dominio específico no se compilan en código de bytes o código ejecutable, sino en varios tipos de objetos multimedia: GraphViz exporta a PostScript , GIF , JPEG , etc., mientras que Csound compila en archivos de audio y un dominio de trazado de rayos. lenguaje específico como POV se compila en archivos de gráficos.

Idiomas de definición de datos

Un lenguaje de definición de datos como SQL presenta un caso interesante: puede considerarse un lenguaje de dominio específico 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 secuencias de comandos 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 de dominios específicos 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 operar como bibliotecas de programación.

Herramientas de programación

Algunos lenguajes de dominio específico 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 de dominio específico 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 sus inicios para permitir (particularmente en su versión 2.0) diversas formas de interacción del 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 de dominio específico como OCL , un lenguaje para decorar modelos con aserciones o QVT , un lenguaje de transformación de dominio específico. Sin embargo, lenguajes como UML suelen ser lenguajes de modelado de propósito general.

Para resumir, una analogía podría ser útil: Very Little Language es como un cuchillo, que puede usarse de miles de maneras diferentes, desde cortar comida hasta talar árboles. [ se necesita aclaración ] Un lenguaje de dominio específico es como un taladro eléctrico: es una herramienta poderosa con una amplia variedad de usos, pero en un contexto específico, es decir, hacer agujeros en las 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 de dominio específico deben ser utilizados por programadores que, al observar su banco de trabajo actual, se dan cuenta de que necesitan un mejor ejercicio y descubren que un lenguaje de dominio específico en particular proporciona exactamente eso. [ cita necesaria ]

Temas de lenguaje 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 externo . Ejemplos bien conocidos incluyen LaTeX o AWK. Una categoría separada conocida como lenguajes específicos de dominio integrados (o internos) generalmente se implementa dentro de un idioma anfitrión como una biblioteca y tiende a limitarse a la sintaxis del idioma anfitrión, aunque esto depende de las capacidades del lenguaje anfitrión. [1]

Patrones de uso

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

Muchos lenguajes de dominios específicos se pueden utilizar de más de una forma. [ cita necesaria ] 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.

Objetivos de diseño

La adopción de un enfoque de lenguaje de dominio específico 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 objetivos de diseño importantes que contrastan con los de los lenguajes de propósito general:

Modismos

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 dichos modismos, pero los lenguajes de dominio específico pueden describirlos, por ejemplo:

Ejemplos

Ejemplos de lenguajes de programación de dominio específico incluyen HTML , Logo para dibujar con 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 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.

Idioma del creador de juegos

El lenguaje de programación GML utilizado por GameMaker Studio es un lenguaje de dominio específico 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 protegidas para facilitar su portabilidad. El lenguaje sirve principalmente para que cualquiera pueda aprenderlo fácilmente y desarrollar un juego.

Lenguaje de marcado ColdFusion

El lenguaje de secuencias de comandos asociado a ColdFusion es otro ejemplo de un lenguaje de dominio específico para sitios web basados ​​en datos. Este lenguaje de secuencias de comandos se utiliza para entrelazar 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 la etiqueta CFML es similar a la sintaxis del elemento HTML.

OTP de Erlang

La plataforma Erlang Open Telecom se diseñó originalmente para su uso dentro de Ericsson como un lenguaje de dominio específico. El lenguaje en sí ofrece una plataforma de bibliotecas para crear máquinas de estados finitos, servidores genéricos y administradores de eventos que permiten rápidamente a un ingeniero implementar aplicaciones o bibliotecas de soporte, que se ha demostrado en los puntos de referencia de la industria que superan a otros lenguajes destinados a un conjunto mixto de dominios. , como C y C++. El lenguaje ahora es oficialmente de código abierto y se puede descargar desde su sitio web.

Maestro de filtros

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 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 lenguajes de dominios específicos para mejorar la productividad y la calidad de la ingeniería de software . El lenguaje específico de un dominio posiblemente podría proporcionar un conjunto sólido de herramientas para una ingeniería de software eficiente. Estas herramientas están empezando 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 incluyen un editor de especificaciones para crear una especificación de requisitos , un navegador de gráficos de dependencia para mostrar dependencias variables, un verificador de coherencia para detectar casos faltantes en fórmulas bien formadas en la especificación, un verificador de modelos y un demostrador de teoremas para verifique las propiedades del programa con las especificaciones y un generador de invariantes que construya automáticamente invariantes según los requisitos.

Un desarrollo más reciente es la programación orientada a lenguajes , una metodología integrada de ingeniería de software basada principalmente en la creación, optimización y uso de lenguajes de dominio específico.

Metacompiladores

Como complemento a la programación orientada a lenguajes , así como a todas las demás formas de lenguajes de dominio específico, se encuentra la clase de herramientas de escritura de compiladores llamadas metacompiladores . Un metacompilador no solo es útil para generar analizadores y generadores de código para lenguajes de dominios específicos, sino que también compila un metalenguaje de dominio específico diseñado específicamente para el dominio de la metaprogramación .

Además de analizar lenguajes de dominios específicos, 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 sistemas de transformación de programas .

Los metacompiladores que desempeñaron un papel importante tanto en la 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 dieron a conocer un lenguaje llamado UnrealScript . Esto permitió un rápido desarrollo de modificaciones en comparación con el competidor Quake (que utiliza 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 se optimizó 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 secuencias de comandos. [ cita necesaria ]

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

Se han desarrollado varios motores de reglas comerciales para automatizar políticas y reglas comerciales utilizadas 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 llega incluso a definir una interfaz para el uso de múltiples DSL dentro de un conjunto de reglas.

El propósito de los motores de reglas de negocios es definir una representación de la lógica de negocios de la manera más legible posible para los humanos. 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 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 de dominio específico 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.

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 trabajo en varios lenguajes como Apache Thrift o Búferes de protocolo de Google .

Pepinillo

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 luego implementarse 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 quienes no son desarrolladores.

Otros ejemplos

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

Ventajas y desventajas

Algunas de las ventajas: [2] [3]

Algunas de las desventajas:

Herramientas para diseñar lenguajes específicos de dominio.

Ver también

Referencias

  1. ^ Fowler, Martín; Parsons, Rebeca. "Idiomas específicos del dominio" . Consultado el 6 de julio de 2019 .
  2. ^ ab Marjan Mernik, Jan Heering y Anthony M. Sloane. Cuándo y cómo desarrollar lenguajes de dominio específico. Encuestas de informática ACM , 37(4):316–344, 2005. doi :10.1145/1118890.1118892
  3. ^ ab 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. ^ Heitmeyer, C. (1999). "Uso del conjunto de herramientas SCR* para especificar requisitos de software" (PDF) . Actas. "Segundo taller del 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 compilador orientado a la sintaxis". Actas de la 19ª conferencia nacional ACM de 1964 . págs. 41.301–41.3011. doi :10.1145/800257.808896. S2CID  43144779.
  7. ^ Carr, C. Stephen; Lutero, David A.; Erdmann, Sherian (1969). "El sistema compilador-compilador TREE-META: un sistema metacompilador para Univac 1108 y General Electric 645". Informe técnico de la Universidad de Utah RADC-TR-69-83 . 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". Software IEEE : 1. doi : 10.1109/MS.2009.152.
  9. ^ Aram, Michael; Neumann, Gustav (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 cuerpos de conocimiento científicos y de dominio específico 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). «Idiomas como bibliotecas» (PDF) . Diseño e implementación de lenguajes de programación .
  15. ^ Flatt, Mateo (2012). "Creando lenguajes en Racket". Comunicaciones de la ACM . Consultado el 8 de abril de 2012 .

Otras lecturas

enlaces externos

Artículos