DSL. Domain Specific Languaje.

Llevo varios días viendo en el blog de El Bruno varios ejemplos acerca de como trabajar con  Visual Studio y las DSL Pero qué son exactamente las DSL y qué posibilidades nos ofrece dentro de este entorno?
He investigado un poco para aclararme, y esto es lo que he encontrado.

En su definición más generalista, un DSL [Domain-Specific Programming Languaje] o "Lenguaje de Programación de Dominio Específico" es un lenguaje diseñado para realizar tareas específicas para un dominio concreto; es decir, a diferencia de un lenguaje de uso general, como c# o VB, un DSL permite abstraerse a una tipo de problema concreto, como puede ser, tratar imágenes.

En el ejemplo del tratamiento de Imágenes, un lenguaje de uso general como VB, C o C#, permitiría realizar las mismas tareas que un DSL, pero un DSL diseñado específicamente para esta actividad, permitiría hacerlo de una manera más sencilla. Un DSL de tratamiento de imágenes incorporaría funciones que el el lenguaje general no traería por defecto.

Otro ejemplo que se me ocurre de DSL son por ejemplo las Macros de Excel. Las Macros de Excel permiten realizar operaciones sobre la interfaz del programa, realizar cálculos estadísticos, etc., sin necesidad de preocuparse de lo que hay por debajo.

Un DSL no tiene porqué ser un lenguaje de programación escrito, que haya que teclear. Puede ser gráfico, permitiendo definir las relaciones entre sus elementos mediante un lenguaje visual. Si mal no recuerdo, las nuevas versiones de office permiten escribir macros sin teclear código, usando solo asistentes.

Pasando un poco de las definiciones más generalistas, vamos a ver qué son las DSL dentro de Visual Studio.

Dentro del SDK de Visual Studio 2005, se encuentran las DSL Tools, que permiten la definición de los elementos de la DSL, la creación de diseñadores gráficos y la generación automática de código usando una notación extensible y personalizable.

Si no he entendido mal, las DSL Tools de Visual Studio permiten definir el dominio, o las piezas del puzle, proporciona el entorno gráfico para la programación visual, es decir, la manera en la que encajaremos las piezas del dominio, y finalmente permite generar el código que representará el puzle montado en un lenguaje no específico.

Está bien, parece interesante, pero cómo se hace esto?

Lo primero, es la instalación del VS 2005 SDK.
Para crear una DSL deberemos crear una solución con dos proyectos: Dsl, que contendrá la definición de la DSL, los editores que se utilizarán y las herramientas de generación de código, y el proyecto DslPackage que contendrá la información acerca de cómo se integrará nuestra Dsl dentro de Visual Studio.



Al crear una nueva solución "Domain-Specific Language Designer" se mostrará un asistente que nos guiará en la creación del proyecto. Existen plantillas, que contienen elementos del dominio y diseñadores predefinidos, en las que podemos basar nuestro DSL.



Las plantillas que nos ofrece el Visual Studio son:
[Traduzco la página de MSDN que lo explica perfectamente]

- Task Flow Diagrams: Esta plantilla proporciona los elementos para el DSL que recuerdan a los diagramas de actividad de UML. Los elementos principales son Actividades y Transiciones entre ellos. La plantilla incluye clases auxiliares como Objetos, Estado de Inicio, Estado Final y Barra de Sincronización.

- Class Diagrams: Esta plantilla proporciona elementos para el DSL que recuerdan a los Diagramas de Clase UML. Los principales componentes son Clases, Interfaces, varios tipos de Asociaciones, y las relaciones de generalización e Implementación. Las clases o interfaces aparecen en el diagrama como cajas que contienen una lista de atributos. Quien haya trabajado con el diseñador de clases de visual studio 2005 conoce este tipo de DSL.

- Minimal Language: Esta plantilla permite crear un DSL, con una clase y una relación, que se representan en el diseñador como una Caja y una Línea respectivamente. La más sencilla de las cuatro plantillas. Indicada para crear una Dsl apartada de los otros tipos de DSL predefinidos.

- Component Diagrams: Plantilla adecuada para DSL en la que se trabaja con puertos. Un puerto es una pequeña figura adosada a un lado de otra figura mayor, usada para definir relaciones en el modelo. De las cuatro, es la plantilla con la que menos me he aclarado.

Los posteriores pasos del asistente son triviales. Piden información acerca del nombre del proyecto, la compañía, etc.

Finalizado el asistente, se encuentran en la solución, los dos proyectos antes mencionados: Dsl y DslPackage.

Dentro de la solución, en el proyecto DSL encontraremos estos elementos:

Al archivo DslDefinition, en el que definiremos todas las piezas de nuestro puzle.

 

El panel DslExplorer, que nos mostrará, de una manera organizada, los elementos, y la lógica que definirá el comportamiento de nuestro Dsl.


El panel DSL Details, que nos informará de algunas propiedades del elemento DSL seleccionado en diseñador DSL.

 

Una cosa realmente curiosa, es que la herramienta que estamos utilizando para crear nuestro DSL, es decir la "DSL Tools" de Visual Studio es un DSL, es decir, un lenguaje visual a partir del cual crearemos en un lenguaje no específico, la solución a nuestro problema especifico. Simplemente, impresionante.


 

[En elaboración...]


Fuentes:

- Wikipedia: Domain-specific programming language

- Cuarta Generación: Microsoft y MDA-MDD - Domain Specific Languages.

- MSDN: Domain-Specific Language Tools
- MSDN Library: Domain-Specific Language Tools

- El Bruno: [DSL] Como crear un Custom Editor ? 
- El Bruno: [DSL] Agregar un elemento que represente un Comentario

Filed under: ,

Comments

No Comments