ClubEnsayos.com - Ensayos de Calidad, Tareas y Monografias
Buscar

Lenguajes de programación dinámicos para el desarrollo de lenguajes específicos de dominio interno

oquinterEnsayo19 de Febrero de 2016

4.294 Palabras (18 Páginas)339 Visitas

Página 1 de 18

Lenguajes de programación dinámicos para el desarrollo de lenguajes específicos de dominio interno

RESUMEN: los Lenguajes Específicos de Dominio (DSL) son lenguajes de programación de computadoras diseñados para resolver una clase particular de problemas pertenecientes a un dominio específico. Ofrecen un conjunto restringido de notaciones y abstracciones, en contraposición de los Lenguajes de Propósito General (GPL). A su vez, los Lenguajes Específicos de Domino Internos son una categoría de los DSLs, que se construyen usando un GPL como lenguaje anfitrión para utilizar sus características de análisis sintáctico y semántico. Este trabajo pretende proporcionar una visión general de los DSLs y de los aspectos y propiedades que ofrecen, en particular, los lenguajes de programación dinámicos para ser elegidos como el lenguaje anfitrión, al momento de implementar un DSL Interno, propiciando el uso de algunos patrones de diseño para la construcción de la sintaxis.

  1. INTRODUCCION

Un lenguaje específico de dominio (DSL) es un lenguaje de programación enfocado a un problema de dominio en particular, o una técnica de representación o resolución de problemas específica. Este concepto no es nuevo, ya que desde siempre existieron lenguajes de programación de propósito específico. Como ejemplos de DSL podemos mencionar a las fórmulas y macros de las planillas de cálculo, las expresiones regulares de ciertas utilidades, Csound (un lenguaje para crear archivos de audio), SQL (Lenguaje para consultas en Bases de Datos relaciones), CSS (Hojas de Estilo en Cascada) y más. Notar que esta definición permite que una biblioteca de un lenguaje de propósito general (GPL) sea considerada un lenguaje específico de dominio.

Los DSLs tienen menos alcance, son muchos más expresivos dentro de su dominio, y son construidos usando un lenguaje existente de propósito general. Los GPL se crean para resolver problemas en muchos dominios en contraposición a los DSL. Ejemplos de GPL son:

  • Lenguajes de programación de propósito general, como C o Java.
  • Lenguajes de programación orientados a un propósito especifico como Cobol en negocios y finanzas, Fortran para la computación numérica o Lips para el procesamiento simbólico. Estos lenguajes no son considerados DSL ya que su poder expresivo puede permitirles resolver problemas de otros dominios.
  • Lenguajes de modelado de propósito general, como UML.

Se crea un DSL cuando existe la necesidad de expresar tipos de problemas y soluciones particulares que los lenguajes pre-existentes no pueden modelar tan fácilmente. Es decir que los DSL se diseñan específicamente para resolver problemas dentro de un dominio en particular, y no están pensados para resolver problemas fuera de este dominio (aunque pueda ser técnicamente posible). Un dominio también puede ser un área de negocio específica. Algunos ejemplos de áreas de negocio son:

  • Lenguajes específicos de dominio para políticas de seguros de vida desarrollado internamente en la empresa.
  • Lenguajes específicos de dominio para simulacros de combate.
  • Lenguajes específicos de dominio para cálculos de salarios.
  • Lenguajes específicos de dominio para facturación.

Los lenguajes específicos de dominio, se dividen en 3 categorías principales, DSLs externos, DSLs internos y lenguajes workbenches (Fowler, 2010). A efectos de este trabajo, nos centraremos en los DSL internos, y más específicamente, en la construcción de su sintaxis  mediante el aporte que brindan los lenguajes de programación dinámicos, quienes ofrecen características valiosas, como la meta-programación dinámica o reflexión, para ser elegidos como el lenguaje anfitrión. Para la construcción de la sintaxis del DSL interno propiamente dicha, se buscarán soluciones planteadas por los patrones de diseño (Fowler, 2010): Object Scoping, Literal List y Literal Map, Dynamic Reception, y Textual Poloshing.

  1. LENGUAJES ESPECIFICO DE DOMINIO: CARACTERIZACION Y CLASIFICACION

Una definición para los DSLs es que son lenguajes de programación computacional de expresividad limitada enfocados a un dominio en particular (Fowler, 2010).

Existen 4 elementos claves en esta definición

  • Leguaje de programación de computadoras: Un DSL es usado por humanos para instruir a la computadora sobre lo que debe hacer. Al igual que con cualquier lenguaje moderno de computadoras, esta estructura es diseñada para que los humanos la entiendan fácilmente, pero aun debe ser ejecutable en alguna computadora. Los DSLs son usualmente declarativos, lo que significa que pueden ser vistos como lenguajes de  programación tanto como de especificación para la construcción de modelos, por ejemplo: Redes de Petri para la especificación de sistemas discretos paralelos o distribuidos.
  • Esencia del Lenguaje: un DSL es un lenguaje de programación, y como tal debe tener un sentido de fluidez donde la expresividad proviene no sólo de las expresiones individuales, sino también de la forma en que se compone el conjunto.
  • Expresividad limitada: un lenguaje de propósito general proporciona muchas capacidades: soporte a datos variados, control y estructuras abstractas. Estas características son muy útiles, pero hacen que sea más difícil aprender y usar un lenguaje de programación. Un DSL admite el mínimo de características necesarias para dar soporte al dominio. No se puede construir todo un sistema software en un DSL, mas bien, se diseña un DSL para un aspecto particular de dicho sistema.
  • Enfoque de dominio: un lenguaje limitado, sólo es útil si tiene un claro enfoque sobre un dominio pequeño. El enfoque de dominio es lo que hace que un lenguaje limitado valga la pena.

Los DSL, se dividen en 3 categorías principales, DSLs externos, DSLs internos y lenguajes workbenches (Fowler, 2010):

  • Un DLS externo es un lenguaje separado y diferente del lenguaje principal con el que funciona la aplicación. Generalmente, un DSL externo tiene una sintaxis personalizada, aunque también es común usar la sintaxis de otro lenguaje (por ejemplo XML). La construcción de un DSL externo  implica desarrollar su propia gramática, analizador sintáctico y analizador léxico para poder procesar el lenguaje. Existen herramientas que nos ayudan en esta tarea, como Lex, programa para generar analizadores léxicos (Lex - A Lexical Analyzer Generador) y Yacc, programa para generar analizadores sintácticos (Yacc: Yet Another Compiler-Compiler). Los DSLs externos pueden ser implementados para ser interpretados o generar código. Ejemplos muy usados de DSL externos son las expresiones regulares, SQL, Awk y archivos de configuración XML para sistemas como Struts e Hibernate.
  • Un DSL interno es una manera particular de usar un lenguaje de propósito general. Un script en un DLS interno es un código valido en su lenguaje de propósito general, pero solo usa un subconjunto de características del lenguaje, con un estilo en particular, para manejar un aspecto pequeño del sistema general, son también llamados DSL embebidos. Los DSL internos dependen de la sintaxis del lenguaje anfitrión y de las capacidades de meta-programación que éste lenguaje le ofrece. Como ejemplo podemos citar a la comunidad del lenguaje Ruby, donde muchas de sus librerías se crearon al estilo DSL, en particular Ruby on Rails, quien es a menudo visto como una colección de DSLs.
  • Un lenguaje workbench es un IDE (Entorno de Desarrollo Integrado) especializado para definir y construir DSLs. En particular, un lenguaje workbench es usado no solo para determinar la estructura de un DSL sino también como un entorno de edición para la escritura de los scripts DSL. Los scripts resultantes combinan estrechamente el entorno de edición y el lenguaje.

Otra clasificación es que los DSL pueden ser visuales o textuales:

  • Los DSL visuales son aquellos que son representados graficamente (Microsoft DSL Tools). Permiten a expertos del dominio (médicos, agrónomos, etc.) validar los diagramas o modelos realizados sin necesidad de aprender o entender un lenguaje ajeno a su realidad.
  • Los DSL textuales son aquellos que se representan utilizando una sintaxis particular en un archivo de texto (SQL, HTML, LaTeX, etc.). Están más orientados a programadores, donde se les ofrece construcciones concretas del dominio de la aplicación, generalmente disminuyendo la cantidad de líneas de código a escribir.
  1. Formas de implementación de los DSL

Existen diferentes maneras de implementar un Lenguaje Específico de Dominio, entre las que podemos encontrar (Mernik, 2005) (Spinellis, 2001):

  • Procesamiento de DSLs con herramientas independientes, convocados por operación directa del usuario, comúnmente, desde línea de comandos o desde un Makefile (por ejemplo, el conjunto de herramientas GraphViz)
  • Lenguajes específicos de dominio que se implementan usando lenguajes de programación de sistemas macro y se convierten o se expanden dentro de un lenguaje de propósito general anfitrión en tiempo de compilación o tiempo de lectura.
  • DSLs embebidos (o internos), implementados como librerías que explotan la sintaxis del lenguaje de propósito general anfitrión o un subconjunto de los mismos, mientras se agregan elementos del lenguaje especifico de dominio (tipos de datos, rutinas, métodos, macros, etc.). La distinción entre un DSL interno y una Interfaz de Programación de Aplicaciones (API) es difusa: la mayoría de las API están diseñadas para exponer sus funciones de una manera directa y transparente, en lugar de crear un lenguaje útil y característico. (Domain Specific Languages) (Fluent Interfaces)
  • Lenguajes específicos de dominio que se convocan (en tiempo de ejecución) desde programas escritos en lenguajes de propósito general como C o Perl, para llevar a cabo una función específica, retornando los resultados de la operación al lenguaje de programación “anfitrión” para su posterior procesamiento; por lo general, un intérprete o máquina virtual para el lenguaje especifico de dominio es embebido en la aplicación anfitriona.
  • Lenguajes específicos de dominio integrados en las aplicaciones de usuario (por ejemplo, lenguajes de macros en las hojas de cálculo) y que son: usados para ejecutar el código escrito por los usuarios de la aplicación, ó generados dinámicamente por la aplicación, ó ambos.

Muchos DSLs se pueden utilizar en más de una manera.

  1. Ventajas y Desventajas de los DSL

Existen riesgos y oportunidades al adoptar un DSL en una aplicación. Un DSL bien diseñado logrará el balance apropiado entre ambas.

Como ventajas de los DSL podemos citar las siguientes (Mernik, 2005) (Spinellis, 2001):

  • Los DSL permiten expresar soluciones usando los términos y el nivel de abstracción apropiado para el dominio del problema. En consecuencia, los mismos expertos de dominio pueden comprender, validar, modificar y a menudo desarrollar programas de DSL.
  • Es código auto-documentado.
  • Los DSL mejoran la calidad, productividad, confianza, mantenibilidad, portabilidad y reusabilidad de las aplicaciones.
  • Los DSL permiten validaciones a nivel del dominio. Mientras las construcciones del lenguaje estén correctas, cualquier sentencia escrita puede considerarse correcta.

Algunas desventajas de los DSL son:

  • El costo de aprender un nuevo lenguaje contrapuesto con su aplicación limitada.
  • El costo de diseñar, implementar y mantener un DSL así como también las herramientas para trabajar con él (IDE).
  • Encontrar, establecer y mantener el alcance adecuado.
  • Dificultad para balancear las ventajas y desventajas entre las construcciones de los DSL y de los lenguajes de propósito general.
  • Potencial pérdida de eficiencia y rendimiento en comparación con el software escrito "a mano".
  • Proliferación de lenguajes específicos de dominio no estándar similares, es decir, un DSL usado dentro de una compañía de seguros A frente a un DSL utilizado dentro de la compañía de seguros B (On the integration of domain-specific and scientific bodies of knowledge in Model Driven Engineering).
  • A Expertos del dominio no técnicos les puede resultar difícil escribir o modificar programas DSL por si mismos (Freudenthal, 2010).
  • Aumento de la dificultad de integración de los DSL con otros componentes del sistema informático (con respecto a la integración con un lenguaje de propósito general).
  • Resulta más difícil encontrar ejemplos de códigos en DSL.
  1. Lenguajes específicos de dominio internos

Los lenguajes específicos de dominio internos, o también llamados embebidos, son lenguajes que están construidos usando las características propias del lenguaje anfitrión y toma como ventaja  las capacidades de meta-programación que éste lenguaje le provee. Por lo tanto un DSL interno está limitado por la sintaxis y estructura del lenguaje anfitrión.

...

Descargar como (para miembros actualizados) txt (28 Kb) pdf (267 Kb) docx (580 Kb)
Leer 17 páginas más »
Disponible sólo en Clubensayos.com