Nota del autor

Si la entrada que estás leyendo carece de imágenes, no se ve el vídeo que teóricamente lleva incrustado o el código fuente mostrado aparece sin formato, podéis conocer los motivos aquí. Poco a poco iré restableciendo la normalidad en el blog.
Este blog es un archivo de los artículos situados previamente en Lobosoft.es y ha dejado de ser actualizado. Las nuevas entradas pueden encontrarse en www.lobosoft.es. Un saludo,
Lobosoft.

sábado, 12 de abril de 2008

Lenguajes Específicos de Dominio en Visual Studio

"Lenguaje personalizado que se centra en un dominio problemático y define el problema en un nivel alto de abstracción", es la descripción que proporciona Microsoft en su glosario de Visual Studio Team System para los DSL, o Lenguajes Específicos de Dominio, a los que da soporte, entre otros, mediante el Visual Studio SDK, en el que centraremos la entrada de hoy.


Los lenguajes específicos de dominio han venido utilizándose desde los albores de la informática. Como su propia definición indica, estos lenguajes enfocan el problema desde alto nivel, abstrayendo al programador de los detalles de la implementación. Imaginemos que deseamos realizar una consulta sobre una base de datos, o un fichero XML. Con un lenguaje de propósito general generalmente utilizaríamos alguna API o capa de acceso a datos que nos abstrajese de los detalles. Los lenguajes de dominio específico "son" la propia abstracción en sí, y permiten solicitar qué queremos, sin necesidad de hacer lo propio con el cómo lo queremos obtener. Así, los DSLs son lenguajes declarativos, y tenemos ejemplos de ellos en el SQL, XQuery o el propio LINQ.


Como avanzaba al comienzo, Visual Studio 2008 SDK (existen también versiones previas del producto para ediciones más antiguas de VS) proporciona diversas herramientas que posibilitan la extensibilidad del IDE (no en vano se encuentra dentro de la gama de productos Visual Studio Extensibility), dotándole de capacidades específicas para la resolución de problemas como el que nos ocupa. Al SDK se le complementaría, por ejemplo, con Visual Studio 2008 Shell, que ya introdujimos hace un tiempo, y en el que profundizaremos dentro de no mucho tiempo.


dsl-sdk.PNG


Si descargamos el SDK (actualmente en su versión 1.0) de la página de Microsoft y procedemos a instalarlo, veremos que nos proporciona una serie de recursos para trabajar con DSLs, WCF, creación de Add-ins y extensiones específicas para el tratamiento de datos. Nos centraremos hoy en el primero de ellos, viendo además la interesante posibilidad de producir DSL "gráficos" mediante los cuales podamos proporcionar a los usuarios elementos de programación rudimentarios pero a la vez potentes. Por ejemplo, podríamos crear un DSL que constase de componentes mecánicos e interconexiones para fabricar maquinaria pesada, y que el propio Visual Studio verificase en la "compilación" del lenguaje que se cumplen todas las restricciones necesarias para que el programa diseñado (un camión, por ejemplo) sea correcto. La salida de la compilación podría ser desde especificaciones en XML, a un ejecutable con determinada funcionalidad. El abanico que se abre ante nosotros es amplio y apasionante, como veremos.


Hoy simplemente nos centraremos en uno de los ejemplos que proporciona el SDK, y en una próxima entrada veremos cómo generar uno propio. Abrimos el ejemplo del árbol genealógico (Family Tree DSL), diseñado específicamente para mostrarnos cómo funcionan los validadores, sirviéndonos además de introducción a los lenguajes de diseño gráficos que generan, como decíamos, código para los componentes o "artefactos" que dibujemos.


DSL Tree Family Sample - Visual Studio 2008 SDK


Una vez cargado el proyecto, procedemos a ejecutarlo y... voilà, tenemos otro Visual Studio como resultado de la ejecución. Pero no es el mismo Visual Studio, sino uno preparado para dar soporte al DSL creado en el ejemplo. Veremos que disponemos de artefactos persona, que podemos arrastrar al diseñador, e interconexiones de parentesco (enlaces matrimoniales y relaciones padre-hijo), así como diversos atributos, como el año de nacimiento y de defunción de las personas.


DSL Tree Family Sample - Visual Studio 2008 SDK


Si probamos a ejecutar el proyecto, obtendremos un error de validación que nos indica que un hijo no puede nacer después de la fecha de nacimiento del padre.


DSL Tree Family Sample - Visual Studio 2008 SDK


Tampoco podrá hacerlo, si probamos a cambiarlo, antes del nacimiento de éste. Por último, si corregimos las fechas y volvemos a ejecutar, el proyecto "compilará" correctamente, produciendo en su caso una salida adecuada.


DSL Tree Family Sample - Visual Studio 2008 SDK


Otro de los ejemplos que proporciona Visual Studio 2008 SDK es un diseñador de diagramas de clases en UML bastante curioso, por cierto. En una próxima entrada veremos cómo diseñar nuestro propio DSL, incluyendo validadores y una salida a la compilación de los proyectos.

2 comentarios:

  1. Hola estoy interezado en DSL pero quisiera saber cuando publicaras la entrada del ejemplo de DSL.

    Gracias

    ResponderEliminar
  2. Hola Antonio.

    Posiblemente durante esta misma semana introduzca algún ejemplo de DSL con validaciones y demás, así como otra entrada de Scrum y el final de la serie sobre el uso de código no manejado desde .NET. Va todo relacionado por un proyecto con el que ando trabajando, así que no te preocupes. En breve habrá ejemplos sobre DSLs.

    Un saludo.

    ResponderEliminar