Inicio > DSL > Domain Specific Languages

Domain Specific Languages

Monday, 6 de April de 2009


Hace no mucho comence a leer acerca de este tema… y desde un inicio me llamó la atención… y aunque no es un tema o concepto nuevo… actualmente está despertando interes entre los desarrolladores… pero… que son los DSL ?

Un par de las mejores definiciones formales que he encontrado son las de Martin Fowler’s…

Un Domain Specific Language es una forma limitada del lenguaje de computación diseñado para una clase específica de problemas.

Aqui otra definición…

La programación orientada al lenguaje (Lenguage-oriented programming) es un estilo general de desarrollo que opera acerca de la idea de desarrollar software alrededor de un conjunto de lenguajes especificos de dominio.

Pero en un sentido canónico como podriamos definir estos conceptos. Así que trataré de explicarlo en una situación del mundo real.

Cuando escuchamos:

  • Un Cuarto de Libra en MacTrio con papas y refresco grande para llevar.
  • $100 pesos tiempo aire a mi plan Amigo

 En el primer ejemplo identificamos a McDonalds y en el segundo a Telcel (Telefonia Celular Mexicana). Esto es posible gracias a que estas 2 compañias manejan un lenguaje especifico orientado a su dominio, ya sea la venta de hamburgesas o a los servicios de telefonpia celular… siendo ademas una manera que los identifica del resto de sus competidores.

Ahora veamos un ejemplo que nos presenta Microsoft para describir los DSL’s.

music

Este tipo de notación esta diseñada como un “lenguaje especifico de su propio dominio”…  la música… y está diseñanada para su entendimiento por personas con un conocimiento en esta área… ya que contiene toda la información necesaria para su interpretación a través de una representación gráfica usando los siguientes propiedades o métodos de ejecución:

  1. Velocidad
  2. Clave (5 líneas donde se representa las diferentes gamas del sonido)
  3. LLave de música
  4. Tiempos
  5. Altura y longitud de los tonos.
  6. Volumen
  7. Especificaciones al volumen (por ejemplo, incremento o disminución de volumen)

Si quisieramos expresar este tipo de notación musical en lenguaje coloquial en idioma español, realmente representaría un problema tanto es su explicación y peor aún en su interpretación. Esto es importante hacer notar… que habrá situaciones que serán mas sencillas repsentarlas de manera gráfica y otras de manera textual.
Ya pasando al área de computación, así como el idioma o lenguaje de español que sirve para describir prácticamente cualquier cosa o situación, tenemos el lenguaje C# que es un lenguaje  de proposito general… es decir… que podemos usar para describir una amplia variedad de temas… pero siguendo con las definiciones de Martin Fowler’s contamos con 2 tipos de DSL’s Lenguajes Específicos… los internos y los externosLINQ sería un buen ejemplo de lenguaje interno, que auque hace uso de la sintaxis y especificaciones de C#… hace una extensión para un proposito en especifico… Y SQL sería un ejemplo de lenguaje externo ya que hace uso de su propia sintaxis que deberá de ser interpretada por un programa externo.
Esto no quiere decir que no podamos generar DSL´s usando código en C# usando los mecanismos de abstracción como se muestra en el siguiente código:

Mac paquete = new Mac();
paquete.Hamburguesa = Burger.CuartoDeLibra;
paquete.MacTrio = true;
paquete.Papas.Size = PapSize.GRANDE;
paquete.Refresco.Size = RefSize.GRANDE;
paquete.OrderType = oType.PARALLEVAR;

Como podemos ver en este ejemplo… la codificación hace uso del DSL propio del negocio… teniendo como ventaja que puedas ser interpretado por una persona propias del negocio y que no tenga conocimientos informáticos. Además de este tipo de representación podemos hacer uso de los “fluent interface“… (acuñado por Eric Evans and Martin Fowler) que es una manera de aplicar una API orientada a objetos en una forma que establece el código más legible. Mediante este mecanismo podemos optimizar y eliminar líneas de código… siendo validas para C#:

Mac paquete = Mac.describedAs
.CuartoDeLibra .MacTrio .PapasGrande .RefrescoGrande .PARALLEVAR;

Esta sigue siendo una instrucción valida para C# y se acerca aún más al lenguaje coloquial del ser humano.

En este momento apenas hemos podido ver una descripción general de que son y para que sirven las DSL a través de una comparación con el mundo real… En siguientes entregas veremos a un nivel más técnico la generación de un proyecto DSL en VS2008 y un un acercamiento a Oslo.

Actualmente Microsoft cuenta con las Microsoft Domain-Specific Language (DSL) Tools para VS2005 y el Visual Studio 2008 SDK 1.1 para crear proyectos de DSL, incluyendo versiones gráficas y generador de código. Para VS2010 se pretende integrar el proyecto Oslo que es la siguiente generación de las DSL Tools que incluye los Textual DSL’s y el nuevo lenguaje “M” & los Quadrants para diseñar DSL’s gráficos.

Mientras aqui les dejo unas cuantas ligas en relación a este tema:

icon_bullet El blog de Martin Fowler’s
icon_bullet Un Webcast de desarrollo de DSL con Visual Studio
icon_bullet La Extensibility Developer Center para las DSL Tools
icon_bullet Descripción general de Domain-Specific Language Tools
icon_bullet Hugo Ribeiro - DSL Tools Reference of Articles

dansalinas DSL

  1. Benjamín Landeros
    Tuesday, 5 de May de 2009 a las 14:17 | #1

    Este artículo me ha dado bastantes ideas. Las cuales pienso poner en practica aqui en Nicaragua. Al parecer soy el más inteligente en mi barrio. Y pienso ser un pionero, en esto que comentas dansalinas. Incluso me has dado la pauta para investigar mas sobre este tema, y todo lo relacionado con la OOP. Adelante mexicanos, aqui les seguimos el paso. Hasta siempre. Atte. Benjas.

  1. Sin trackbacks aún.