Idioma específico del dominio


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. Hay una amplia variedad de DSL, que van desde lenguajes ampliamente utilizados para dominios comunes, como HTML para páginas web, hasta lenguajes utilizados solo por una o unas pocas piezas de software, como el código de 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 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 entre los lenguajes de propósito general y los 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 más ampliamente, o por el contrario, en principio puede ser capaz de una aplicación amplia pero en la práctica se usa principalmente para un dominio específico. Por ejemplo, Perl se desarrolló originalmente como un lenguaje de procesamiento de texto y pegado, 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 restringida 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. Puede valer la pena crear un lenguaje específico de dominio (con software que lo admita), 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 especializarse 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 específico de dominio se crea específicamente para resolver problemas en un dominio particular y no pretende ser capaz de 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 comerciales incluyen:

Un lenguaje específico de dominio está en algún lugar entre un lenguaje de programación diminuto 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, al igual que el límite entre los lenguajes de secuencias de comandos y los lenguajes de propósito general.

Los lenguajes específicos de dominio son lenguajes (o, a menudo, sintaxis o gramáticas declaradas) con objetivos muy específicos en 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.