LayerD

LayerD
Información sobre la plantilla
Proceso layerd1 esp.jpg
Framework de desarrollo de software

LayerD es un framework de desarrollo de software compuesto por lenguajes de alto nivel, un lenguaje común denominado Zoe y con un diseño completamente modular. El objetivo principal del framework es desarrollar herramientas que permitan implementar software utilizando un nivel de abstracción mayor que el utilizado en la industria de software contemporánea (entiéndase 1990-2007).

Generalidades

El framework propone múltiples lenguajes de alto nivel destinado a ser utilizados por programadores ordinarios, y un lenguaje común de nivel inferior (lenguaje Zoe) extensible por los programadores con completas características de reflexión en tiempo de compilación. Adicionalmente el lenguaje Zoe se diseñó como un lenguaje de alto nivel con generación de código modular y sin encontrarse ligado a ningún entorno de tiempo de ejecución en particular, siendo esta una característica diferenciadora con respecto a otros lenguajes anteriores y contemporáneos como C++, Java, C#, Ada, Ruby, etc.

Los lenguajes LayerD son por naturaleza multi-paradigma, aunque el lenguaje Zoe es fundamentalmente un lenguaje estático fuertemente tipado y orientado a objetos sus características de extensión programables por los programadores hace posible implementar software utilizando otros paradigmas incluyendo paradigmas emergentes (en relación a 2008) como los paradigmas de programación intencional, el paradigma de orientación al lenguaje y similares.

Historia

Fue inicialmente ideado por Alexis Ferreyra alrededor de fines del año 2002 principios de 2003 (aunque se puede rastrear el origen del proyecto y del nombre del framework al año 1999). Sin embargo, no empezó a ser implementado seriamente hasta el año 2005 dedicándosele un tiempo considerable durante dicho año, 2006 y 2007.

Durante 2006 se mudó el desarrollo al Laboratorio de Investigación de Software (LIS) de la Facultad Regional Córdoba de la Universidad Tecnologica Nacional de Argentina cita en la ciudad de Córdoba. En el LIS de la UTN-FRC se sumaron al proyecto Alejandro Romero, Demián Odasso y Lucas Forchino colaborando con Alexis Ferreyra en la implementación de diversas partes del framework. También colaboraron temporalmente Claudio Mugas y Javier Dall'Amore. Para octubre de 2007 ya se contaba con todo el circuito principal implementado. Actualmente (enero de 2008) se esta trabajando para mudar el proyecto a dominio público lo más prontamente.

Componentes

  • Meta-lenguajes de muy alto nivel: son lenguajes de programación ordinarios como Java, C++, Ada, con la excepción de que generan código en el lenguaje ZOE como salida y no código objeto o bytecode. Un meta-lenguaje no debe necesariamente ser orientado a objetos o un lenguaje tradicional, bien puede ser un lenguaje gráfico o utilizar otro paradigma como el funcional o el lógico.
  • Lenguaje ZOE: es el lenguaje intermedio del framework. Todo meta-lenguaje debe generar código ZOE, por tanto en una medida todo programa en el framework LayerD es un programa ZOE o debe ser transformado en un programa ZOE. El lenguaje ZOE posee capacidades de meta-programación y reflexión en tiempo de compilación, además tiene un diseño modular.
  • Librería de generadores de código ZOE: la etapa de generación de código en el compilador ZOE es modular, por tanto es posible "enchufar" generadores de código para diferentes plataformas. El compilador ZOE puede entregar un código diferente a cada generador de código adaptado a las necesidades particulares de un generador, esto es con el objetivo de que la implantación de un generador de código ZOE sea una tarea relativamente sencilla.

Los meta-lenguajes pueden implementarse con relativa facilidad por requerirse sólo las etapas de análisis léxico y sintáctico dejando el análisis semántico al compilador ZOE. Los generadores de código ZOE son sencillos de construir para plataformas que ya soporten objetos, como ser para la generación de código en lenguajes orientados a objetos tradicionales, como ejemplo se puede citar que un generador de código básico para la plataforma Microsoft .NET se desarrolló en sólo poco más de tres semanas por un único desarrollador.

Consideraciones

De acuerdo a los desarrolladores del proyecto para implementar los objetivos se tuvieron en cuenta las siguientes consideraciones durante el diseño de la tecnología LayerD:

  • Es probado históricamente que no se pueden dar grandes saltos en tecnología más halla del limite que nos impone la restringida capacidad de cambio de las personas. Así como no se pasó de codificar programas en tarjetas de cartón a utilizar el paradigma de orientación a objetos en lenguajes con entornos de ejecución controlada como Java o C# de un día para el otro, creemos que no será posible una migración directa de todo lo que implica el Paradigma de Orientación a Objetos, en cuanto al diseño e implementación de software, en la ingeniería de software actual a paradigmas más abstractos como los propuestos Paradigma de Orientación a Lenguajes o el Paradigma de Programación Intencional. Por tanto, en el diseño de LayerD se ha tomado el compromiso de desarrollar herramientas que le sean familiares a los desarrolladores e ingenieros de software, pero que al mismo tiempo le permitan gradualmente implementar funciones propias de enfoques más avanzados como los mencionados paradigmas, la meta-programación masiva, la orientación a aspectos, bibliotecas activas, etc.
  • Se considera que el desarrollo de una nueva tecnología que no permita la reutilización de la infraestructura existente o que incurra en la pérdida de rendimiento al utilizar los bienes de software disponibles es totalmente inaceptable por las pérdidas económicas que ello causaría. Por tanto, el diseño de la tecnología LayerD maximiza la reutilización completa de la infraestructura actual para el desarrollo de software, como ser bibliotecas de clases, herramientas de administración de código, depuradores, etc. Incluso se planea implementar meta-lenguajes "clones" de algunos lenguajes populares en la actualidad para minimizar el tiempo de inserción en el mercado de la tecnología.
  • En general, en el diseño e implementación se ha tratado de no perder de vista la necesidad de que una tecnología para desarrollar software de próxima generación debe funcionar como un puente entre el presente y el futuro de la ingeniería de software para poder llegar a ser exitosa, de lo contrario los esfuerzos por producir tecnología que no este preparada para las condiciones actuales del mercado serian en vano.

Objetivos del framework

El objetivo principal y general del framework es el desarrollo de un conjunto de herramientas y técnicas de programación que permitan implementar un framework de desarrollo de software de próxima generación (entendiendo a software de próxima generación como la posibilidad de desarrollar software más abstracto, reutilizable e independiente de la plataforma). Éste objetivo general fue descompuesto en los siguientes más específicos:

  • Permitir la utilización de toda la infraestructura existente en cada plataforma (bibliotecas de clases, componentes, etc.).
  • Extender el tiempo de vida de una implementación a décadas (20, 30, 50 años).
  • Reflexión completa, orientada a objetos, en tiempo de compilación.
  • Desarrollo de software multiplataforma.
  • Portabilidad entre plataformas sin pérdida de rendimiento.
  • Permitir implementar el software desarrollado en plataformas de software o hardware inexistentes al momento del desarrollo inicial.
  • Componentes modulares y abiertos (compilador extensible con "Plugins").
  • Múltiples lenguajes de alto nivel como origen.
  • Fácil implementación de lenguajes de alto nivel.
  • Capacidades RAD incorporadas a la plataforma de desarrollo (compiladores) independientes del lenguaje de programación, entorno y plataforma.
  • Lenguajes de alto nivel extensibles.
  • Extensiones de lenguajes programables fácilmente y utilizables por cualquier lenguaje cliente.
  • Resumen: "Software abstracto".

Lenguaje ZOE

El lenguaje ZOE se escribe en un dialecto XML, por tanto otorga interesantes posibilidades como ser:

  • La integración de información relacionada en el propio código utilizando un espacio de nombres XML diferente.
  • La presentación del código en forma legible con diferentes “pieles” (en inglés "skins") usando hojas de transformación XSLT.

Los fuentes del lenguaje ZOE pueden permitirse ser escritos en XML por ser un lenguaje que será utilizado por los compiladores de los meta-lenguajes y no por programadores directamente. El lenguaje ZOE introduce una nueva estructura semántica denominada “Classfactory” (y más generalmente “Tipos Factory”). Está estructura, que es una forma especial de clases ordinarias, permite implementar fácilmente capacidades de meta-programación, e implementa la reflexión en tiempo de compilación del lenguaje lo que permite escribir programas que pueden examinarse a si mismos, generar código, optimizar código, emitir advertencias y errores personalizados, implementar biblioteca activas y en general realizar cualquier tarea que sea posible durante la compilación de un fuente.

A diferencia de la mayoría de los compiladores extensibles existentes o en desarrollo actualmente (2007) las extensiones implementadas con Classfactorys en el lenguaje ZOE no permiten modificar la sintaxis ni la estructura léxica de los programas de alto nivel, sino sólo el significado semántico del programa y de manera controlada por el programa cliente de la extensión. Las extensiones programables para el compilador ZOE son fácilmente implementables (en comparación a otros lenguajes, compiladores y sistemas de meta-programación existentes) por utilizar conceptos ya conocidos en la programación orientada a objetos tradicional y no requerirse conocimiento interno sobre el funcionamiento de compiladores.

Las capacidades de meta-programación y extensión en el lenguaje ZOE poseen características especiales en relación a otros sistemas de meta-programación y MOPs (Meta-Objetcs Protocol) como por ejemplo permitir una secuencia indefinida de ciclos de compilación, y la utilización de múltiples plugins en un único programa cliente.

Otras características y beneficios de las extensiones del lenguaje ZOE existen, como ser la posibilidad de desarrollar herramientas RAD o la posibilidad de implementar las extensiones para soportar múltiples plataformas de forma gradual. Todas las extensiones programadas en cualquier meta-lenguaje para el lenguaje ZOE, pueden ser utilizadas por cualquier otro meta-lenguaje (diferente) sin cambios.

Beneficios esperados

Según los desarrolladores del proyecto se esperan los siguientes beneficios:

  • No se pierde la inversión de lo desarrollado para otras plataformas como .NET o Java. La reutilización de la infraestructura existente es completa y transparente para el programador de alto nivel.
  • No se requiere aprender nuevas bibliotecas de clases, se usa lo existente en cada plataforma. Los meta-lenguajes iniciales serán muy similares a los lenguajes orientados a objetos populares en la actualidad, con lo cual se requiere muy poco tiempo de capacitación inicial. Adicionalmente se planea la construcción de compiladores de un meta-lenguaje similar a Java a código ZOE y otro de un meta-lenguaje similar a C#.
  • Se puede aprovechar las ventajas (extensiones del compilador) gradualmente. Inicialmente se puede programar sólo utilizando las bibliotecas existentes en la plataforma de implementación y orientación a objetos tradicional, gradualmente se puede incorporar técnicas de meta-programación, orientación a aspectos, programación intencional, bibliotecas activas, etc.
  • Utilización de un único lenguaje para implementar en más de una plataforma (por ej. Java, .NET y C++).
  • Los plugins pueden ser desarrollados por programadores con experiencia y utilizados por principiantes sin riesgos.
  • Si en el futuro se quiere dejar de utilizar LayerD, no se pierde la inversión realizada.
  • Los directores de proyecto pueden forzar reglas semánticas a los programadores como la no utilización de campos públicos, la documentación del código, respetar el diseño en capas, etc.
  • Al no permitir el cambio en la estructura léxica o sintáctica de los lenguajes de alto nivel, los fuentes de los programas de alto nivel siempre conservan una estructura básica similar sin importar cuantas extensiones utilice un programa. Esto facilita la lectura de los programas y garantiza que no se perderá legibilidad. Adicionalmente, cada meta-lenguaje utiliza su propia sintaxis y estructura léxica, por tanto los desarrolladores utilizan las extensiones de forma simple.

Implementación

En enero de 2008 se ha desarrollado un compilador de un meta-lenguaje para un lenguaje denominado Meta-D++ el cual posee una sintaxis similar a C++/C#, el compilador Zoe, un generador de código para la plataforma Microsoft .NET, un generador de código en etapa avanzada de desarrollo para la plataforma Java y un compilador experimental para un metalenguaje denominado "Argentino", un lenguaje de programación en español con sintaxis similar a Pascal.

En enero de 2008 los binarios y fuentes aún no se encontraban disponibles para el dominio público y sólo eran accesibles por el grupo de desarrollo interno y otras personas allegadas. El grupo de desarrollo espera poner disponibles al dominio público todos sus trabajos en algún momento dentro de los primeros meses de 2008 bajo una licencia Open Source.

Fuentes