Showing posts with label LayerD. Show all posts
Showing posts with label LayerD. Show all posts

Sunday, October 5, 2008

Hablemos de Ingeniería



El viernes pasado dí una pequeña charla en el Laboratorio de Investigación de Software de mi facultad (UTN - FRC) y duro poco más de hora y cuarto.

El objetivo era dar una introducción al proyecto LayerD a quienes no lo conocían.


Los temas de la charla fueron:

  • ¿Qué es LayerD? : una introducción en dos minutos explicando que se trata básicamente de lenguajes de programación con algunas características "novedosas" como compiladores multi-stage, extensibles y modulares.
  • Motivaciones del Proyecto : se explico como se tuvieron en cuenta los problemas actuales a la hora de implementar software, lo que se espera para el hardware de las proximas decadas y el software que se viene en los proximos años. Todo ello influyo en el diseño de LayerD.
  • Hablemos de Ingeniería : a lo largo del tiempo aprendi que no es sencillo explicar el framework LayerD y menos justificar sus características simplemente nombrandolas, por lo tanto me tome la mayor parte de la charla para hablar sobre ingeniería de software, compararla con otra ingeniería (civil) y analizar las limitaciones y frustraciones actuales de nuestra querida profeción, también introducir sobre como sobrellevar estas límitaciones. Se introdujo al tema de diseñar lo que llamo arquitecturas "bidimensionales" de software, donde no sólo se tiene en cuenta la "dimensión de tiempo de ejecución" (es decir todo lo que sucede cuando el software se esta ejecutando) sino también empezar a considerar la existencia de otra dimensión la "dimesión física". Aplicar tecnicas conocidas de diseño como la separación en capas también en esta dimensión física del software nos permite elevar considerablemente su nivel de abstracción y abrir la puerta para una mayor reutilización, tiempo de vida y menores costos de mantenimiento del software.
  • Paradigmas al Vuelo : se hablo rápidamente del impulso que se le esta dando a "nuevos" (no tanto) paradigmas que impulsan el desarrollo de software más abstracto como la orientación al lenguaje, programación declarativa, lenguajes de dominio especifico, programación intencional, model driven development, etc. Y como con LayerD es posible implementar software bajo estos paradigmas.
  • El Diseño de LayerD : Se explico brevemente el diseño y como todo encaja con los requerimientos y los problemas existentes en la ingenieria de software. Si todo salio como esperaba, se mostro porque LayerD tiene el diseño que tiene y como cada pieza y funcionalidad es necesaria.
  • Ejemplos : Se mostraron diversos ejemplos.
  • El Futuro / Lo pendiente : Se hablo de toda la inmensa lista de pendientes dentro del proyecto y como esto es apenas un punto de partida. Se invito a quienes quieran participar a ayudar a completar el proyecto o tomar lo aprendido para sus propios proyectos.
Para quienes le interese dejo las diapositivas aquí (no son tan interesantes sin el "speech" supongo je). Por cierto, si sos de la UTN recorda que todos los viernes estamos dando charlas en nuestro laboratorio, además compartimos galletas y café. Seas o no alumno de la UTN podes entrar a nuestra pequeña red social para enterarte de varias cosas que pasan en nuestro laboratorio.

Ya no pongo fechas (demasiado trabajo y terminando de cursar) pero en cualquier momento publico los manuales y actualizo la documentación además del SDK y los fuentes publicos.

Saludos.

Tuesday, July 22, 2008

Primer Upload de Código Fuente

Como se prometió con anterioridad empecé a subir el código fuente del proyecto LayerD para que esté disponible bajo licencias Open Source.

Los links a SourceForge:

En el primer upload de código subí los siguientes componentes:

  • Compilador Meta D++
  • Zoe CodeDOM para C++ y C#
  • Modulo de Salida Zoe para .NET
  • Modulo de Salida Zoe para Meta D++ (para compilación interactiva)
  • Generador de CodeDOM para C++ y C# (utilidad que genera las clases del CodeDOM a partir del esquema del lenguaje Zoe en XSD)
  • Una librería común usada por los módulos de salida Zoe y el compilador Zoe (cuando estos son programados para en .NET)

Para todos estos componentes utilice la licencia BSD, licencia que otorga enorme flexibilidad ;-).

Cuando revise un poco el código del compilador Zoe lo subo al repositorio de SourceForge, esta porción de código pienso usar licencia Eclipse o Mozilla (un poco más "restrictiva" que la BSD). El código de los modulos subidos varía en calidad ya que fue desarrollado durante diversas etapas :-), un poco a la apurada, un poco bien, un poco "temporal".

Bueno, los post están pobres últimamente, pero estoy preparando cosas interesantes y aplicaciones prácticas reales como software que corre en .NET escritorio, ASP.NET y J2EE sin cambios. Tampoco me he olvidado de la documentación que también la estoy revisando y actualizando. Por cierto, aparentemente LayerD se usará en una parte de otro proyecto comercial (es decir un proyecto "real" de desarrollo) más adelante les confirmo.

Por cierto, cualquier consulta sobre el código me consultan, ni hablar si quieren colaborar en algo serán más que bienvenidos ;-)

Saludos. Alexis.-

Sunday, May 18, 2008

Dentro de LayerD

Estos días – y para no perder la costumbre – ando muy escaso de tiempo o energías suficientes como para dormir cuatro horas por día :-P. Por tanto, el post será corto cosa que – créanme – no es una de mis características tener capacidad de resumen para bien o para mal.

En el link posteo un PowerPoint que presentamos el año pasado en la UTN-FRC cuando realizamos la primera presentación en sociedad de LayerD (aún sin permitir al público tocar ni siquiera los binarios jeje).

Fueron muy poquitas personas a la presentación lo cual es de esperar teniendo un título para la charla que no es "muy comercial" y la mala difusión que tuvo. Lo importante del PPT que posteo es que habla de muchas cosas las cuales no están documentadas en otro lado – al menos en la web y que recuerde :-P – y si bien sin su "speech" relacionado no todo se entenderá o tendrá sentido, imagino que puede ser útil para comprender la tecnología LayerD.

Recuerdo que dicha charla se había planeado como de una hora y media con un recreíto a la mitad, lo cierto es que fueron tan pocas personas que no queríamos que corrieran en el recreo J y además en ese momento ni lo pensé y seguí hablando sin parar y luego mis compañeros Demian, Lucas y Alejandro. Fue bueno ver que casi nadie se fue antes de terminar – tal vez no se fueron para no dejarnos solos J – a pesar de que hablamos largo rato.

En la charla presentamos varios ejemplos funcionando incluyendo un programa multiplataforma de manejo de archivos que corría sin cambios en Java y NET, una librería activa para conexiones a bases de datos usando ADO.NET, lenguajes de dominio especifico para interfaces gráficas, una estructura para ejecutar fácilmente instrucciones de código en hilos separados, un par de ejemplos en Argentino! (lenguaje LayerD que en este momento se encuentra abandonado lamentablemente), ejemplos de refactoring de código usando classfactorys interactivas, un programa que se corregía a sí mismo si tratábamos de llamar a miembros inexistentes de clases por cometer errores de esctitura, entre otros.

El PPT habla un poco los modulos de salida, de la clasificación de los modulos de salida, de las características principales del lenguaje Zoe y Meta D++, el proceso de compilación de un programa Zoe, los tiempos de compilación. Más importante quizás es que intenta explicar porque necesitamos poder construir software abstracto.

LayerD no es un proyecto pensado o construido a la ligera, no es un lenguaje de programación más, o un generador de código o una utilidad para el programador. Muchas cosas se han tenido en cuenta y se han debido de solucionar para poder hoy empezar a tenerlo funcionando, en cuanto se posean los compiladores y módulos de salida desarrollados al nivel adecuado podrá construirse cualquier tipo de software desde un sistema operativo hasta un blog J, con los compiladores y módulos de salida actuales puede desarrollarse cualquier aplicación .NET J y prontamente Java. Lamentablemente, tengo tan poco tiempo de documentar el proyecto que todos los días me veo superado. Por otro lado, de a poco la falta de documentación va mejorando, ya tengo prácticamente un manual básico de Meta D++ que apenas tenga tiempo de revisar publicare, también estoy trabajando en actualizar la Especificación más formal de Meta D++ (que implícitamente especifica Zoe) y los viejos tutoriales del sitio web. Me alienta saber que si estuvo bien pensado, LayerD debe de resistir el paso del tiempo y lo peor que puede pasar es que alguien más lo reinvente uniendo todas las piezas que une LayerD y quizás realice un mejor trabajo y nos beneficiemos todos.

Quiero cerrar este post tratando de graficar todo lo que LayerD significa y con pocas palabras. Sé que eso es casi imposible porque el proyecto es una visión a mediano y largo plazo para la ingeniería de software, encarnada en herramientas sí, pero no se trata tanto sobre las herramientas sino en cuestionar técnicas, herramientas y formas de solucionar los problemas en la implementación de software. He aprendido que no es sencillo mostrar porque hace falta avanzar en software abstracto, porque LayerD es un camino para llegar a ese objetivo – claro espero no el único – y porque debemos de invertir en ello. Con un poco de suerte y trabajo, espero que en los próximos años quien no use una tecnología similar a LayerD al producir software tenga una gran desventaja competitiva en relación a quienes si lo utilicen y entonces, cuando alguien más visionario lo haya demostrado, el resto comprenderá que no es posible moverse en un mundo de cuatro dimensiones teniendo en cuenta sólo tres o al menos no es posible llegar a todos lados J.

Aquí va el link al PPT.

Tuesday, April 29, 2008

Binarios de LayerD - SDK 0.5.0 Alpha

Al fin no más promesas o fechas tentativas, esta vez release de verdad para todo el mundo. Veo que es tarde pero todavía es Martes 29 de abril de 2008 en Córdoba Argentina, como prometí el primer release de binarios con un "mini-SDK" de LayerD se encuentra disponible a partir de ahora y para siempre para todo el mundo que lo encuentre interesante.

Primero, el link para bajar los binarios desde SourceForge: Download LayerD SDK 0.5.0

Dividiré esta nota en dos partes: sentimentalismo y notas técnicas.
Si no le interesa mis pensamientos o sentimientos al respecto de éste release vea directamente las notas técnicas.

Sentimentalismo del Release

Desde que LayerD en su forma actual fue una idea halla por fines del año 2002 hasta ahora han pasado largos años y mirando para atras se sienten muchas cosas.
No fue sencillo desarrollar esta humilde pero pretenciosa tecnología cuando todo es realizado a pulmón. Sin embargo, a lo largo del camino que fue - y seguira siendo - el desarrollo de éste proyecto me encontré con muchas manos amigas que me ayudaron y bancaron de diversas maneras.
Ya no recuerdo cuantas veces pensé en tirar todo el proyecto literalmente a la mierda, "para que esforzarme con esto tanto". Pero por alguna razón todas esas ideas terminaron plasmandose en lo que hoy es LayerD como dije, en gran medida gracias a todas las personas que me ayudaron o apoyaron a lo largo de este tiempo.
Tengo que agradecer a mucha gente, en primer lugar a mi familia y a mis padres a quienes les debo casi todo lo que soy, en segundo lugar a Dios por permitirme vivir tantas cosas grandiosas, a todos mis amigos de siempre que implícitamente o explícitamente son un gran apoyo para mi siempre. A quienes siendo alumnos de la UTN-FRC se animaron a sumarse al proyecto ya empezado de otro alumno en el Laboratorio de Investigación de Software de la UTN, en párticular a Lucas Forchino, Demián Odasso y Alejandro Romero quienes me dieron una gran mano y aunque no lo sepan mucho animo para continuar con el proyecto, también a muchas otras personas que se acercaron al proyecto a todos ellos gracias!.
También quiero agradecer a Juan Carlos Vázquez quien me apoyo para poder llevar el proyecto desde mi casa al laboratorio de la facultad lo cual significo posiblemente que el proyecto no se cayera antes de dar algún resultado.
No puedo no agradecer enormemente a mis actuales compañeros de trabajo Javier Dall'Amore, Pablo Frias y Mateo Bengualid quienes se convirtieron en los tres primeros programadores de Classfactorys del mundo jaja - a parte de mi claro - y realmente no se quejaron cuando encontraron algunos de los infinitos bugs en el compilador Meta D++ y Zoe, gracias a ellos ahora son herramientas que se dejan usar mucho más!!
Seguro me estoy olvidando de agradecer a más personas, si sos uno de ellos perdón!!!

Notas Técnicas

El release es considerado SDK 0.5.0 por la sencilla razón de creer que en la actualidad los compiladores y herramientas entregadas poseen quizas la mitad de la madurez y funcionalidad que me gustaría tuvieran. Queda muchisimo trabajo por delante para terminar de implementar todas las funciones del lenguaje Zoe y Meta D++, los modulos de salida (bueno aquí el trabajo literalmente puede ser infinito por que se puede tener cuantos módulos quieras :-), lo mismo que en los meta-lenguajes y las líbrerias de classfactorys o clases ordinarias jeje ).

Recuerden lo siguiente antes de ponerse a jugar con LayerD:
  1. Se escribe el programa en Meta D++ (actualmente el único compilador de alto nivel LayerD disponible públicamente)
  2. Se compila el programa con el compilador de Meta D++ (metadppc.exe).
  3. Se compila el resultado (programa .zoe) con el compilador Zoe (zoec.exe).
En el instructivo incluido en el paquete se explica brevemente la utilización de los compiladores, vea la ayuda de linea de comandos para más información - no todos los parámetros de los compiladores funcionan, la mayoría si.

Sólo distribuyo el modulo de salida a .NET porque es el más trabajado y depurado, el módulo de salida Java seguramente estará público prontamente pero deberán de esperar al menos unas semanas dependiendo del tiempo que tenga.

Y los releases a partir de ahora serán seguidos con cada versión un poco más completa y con menos bugs!! de los compiladores. Por favor, tengan en cuenta que en el release actual varias funciones importantes no están implementadas y no pueden considerarse versiones estables, ni siquiera betas para mi gusto - aunque muchas empresas comerciales lanzan "release candidates" en condiciones muy dudosas - prácticamente todo el código esta escrito aprendiendo sobre compiladores - antes no había desarrollado otros lenguajes o compiladores son mis primeros :-) - y en tiempo libre fuera del estudio y el trabajo. Más halla de estos detalles los compiladores permiten desarrollar cosas serias, de hecho ya hay varios miles de líneas programadas en LayerD siendo la mayoría de ellas Classfactorys :-), y todo eso en el marco de un proyecto comercial real, por tanto no hay pretextos para no probarlos!! ;-)

Lo se, la documentación es escasa, pero lo ire subsanando de a poco, en una o dos semanas subiré un manual de Meta D++ y una versión actualizada de la especificación de Meta D++ (la actual en el sitio LayerD.net no esta actualizada), también estaré actualizando el sitio web LayerD.net que ahora no tuve tiempo de hacerlo.

En lo subsiguiente empezaré a poner publicamente en SourceForge el código del proyecto. Empezando por el compilador Meta D++ y el Modulo de Salida Zoe a .NET, luego el código del compilador Zoe. Todo con licencias Open Source.

Bueno, espero alguien pueda disfrutar y aprovechar estas herramientas!!! Espero el feedback!!

Saludos !!,
Alexis Ferreyra

Saturday, April 12, 2008

Guerra de Sintaxis, LayerD no va a la guerra

Desde que aparecieron los primeros lenguajes de programación en la década del 50 aproximadamente - dejando de lado otros antecedentes históricos que pueden considerarse - todo el mundo ha discutido sobre la conveniencia o no de diferentes sintaxis a utilizar en los lenguajes de programación.
Lo cierto es que a la hora de diseñar la estructura léxica y sintáctica de un nuevo lenguaje de programación - hablando siempre de lenguajes cuya sintaxis es textual - deben tomarse decisiones de compromiso. Una decisión típica que debemos tomar es elegir si nuestro lenguaje será fácil de escribir o fácil de leer, o al menos eso hacemos.
La sintaxis de un lenguaje de programación es importante en muchos sentidos:
  • Es la cara visual del mismo
  • Si gusta a los programadores a la hora de escribir los programas sumará al lenguaje en popularidad.
  • Si es fácil de leer será más fácil mantener el código. Por el contrario, si es complejo de leer la manutención se dificultará.
  • Como en general se dispone de una única sintaxis puede limitar la adopción del lenguaje por muchos programadores a los cuales no les agrade inicialmente.
A lo largo del tiempo cada lenguaje ha tenido que defender sus diseños sintácticos, por citar un ejemplo transcribo una porción de un manual de Python:

...The indentation rule may seem unusual at first glance to programmers accustomed to C-like languages, but it is a deliberate feature of Python, and one of the main ways that Python almost forces programmers to produce uniform, regular, and readable code. It essentially means that you must line up your code vertically, in columns, according to its logical structure. The net effect is to make your code more consistent and readable (unlike much of the code written in C-like languages). To put that more strongly, aligning your code according to its logical structure is a major part of making it readable, and thus reusable and maintainable, by yourself and others. In fact, even if you never use Python after reading this book, you should get into the habit of aligning your code for readability in any block-structured language. Python forces the issue by making this a part of its syntax....


Se podrían citar decenas de ejemplos más, en definitiva cada uno de los lenguaje dirá lo mismo "que buena que es esta sintaxis en comparación con el lenguaje X por bla, bla, bla, bla".
A partir de ello uno podría preguntarse porque no han surgido lenguajes de programación para los cuales se puedan usar más de una sintaxis. El problema con éste enfoque es la complejidad que implicaría el mantenimiento si no contamos con algún mecanismo que vuelva transparente la traducción entre diferentes sintaxis, además del aumento en la dificultad a la hora de capacitar a los programadores.

En última instancia el gusto personal de cada programador convierte la tarea del diseño de la estructura léxica y sintáctica de un lenguaje en algo mucho más cercano al arte y la subjetividad que a la ingeniería.

Personalmente, siempre me molesto tener que seguir una sintaxis en particular a la hora de programar para determinada plataforma y también me he preguntado porque debemos usar la misma sintaxis para escribir un programa que para leerlo. Lo cierto que ya transcurrieron más de 50 años desde la aparición de los primeros lenguajes de programación de alto nivel y parece que todavía discutimos que estilo sintáctico es mejor para un lenguaje de programación cuando en realidad desde el punto de vista de un compilador y un entorno de ejecución la sintaxis utilizada para construir un programa es algo totalmente irrelevante. Los pilares de cualquier lenguaje de programación o entorno de ejecución son su estructura de tipos y las características semánticas asociadas. Me da toda la sensación que a estas alturas de la historia deberíamos de haber pasado a la adultez en la ingeniería de software y poder utilizar libremente diferentes sintaxis de acuerdo a nuestro gusto, humor y proyecto en el cual estemos trabajando. Tampoco deberíamos limitarnos a utilizar la misma sintaxis para leer los programas que para escribir, sencillamente es mucho más eficiente utilizar diferentes formatos para la escritura que para la lectura.

En la actualidad, al menos en cuanto a entornos de programación populares, la única plataforma que ofrece cierta libertad a la hora de elegir la sintaxis es .NET de Microsoft. También se puede nombrar varios lenguajes de programación para la plataforma Java. Quizás, la limitación de estos lenguajes que apuntan al mismo entorno de ejecución es la falta de herramientas automatizadas para la traducción entre ellos, adicionalmente no siempre las características semánticas son completamente compatibles entre los diferentes lenguajes. Adicionalmente, no se poseen herramientas que nos permitan utilizar diferentes sintaxis para leer los programas de manera sencilla o al menos usadas de forma masiva.

Por estas razones, a la hora de diseñar LayerD quise asegurarme de poder utilizar múltiples sintaxis y evitar esas largas discusiones sobre que sintaxis es mejor para escribir un programa o que sintaxis es más adecuada para leerlo y mantenerlo. El 99,9% de los lenguajes de programación actuales combaten en la guerra de sintaxis desde que nacen, con un poco de suerte en el caso de los lenguajes de alto nivel dentro el framework LayerD eso no será así.

LayerD no va la guerra de sintaxis.


Con LayerD se puede elegir entre diferentes sintaxis para escribir los programas y se posee una multitud más de formatos para leerlos. Ok, en sus primeros meses no se poseerán muchos lenguaje LayerD de alto nivel - llamados meta-lenguajes - ya que en la actualidad disponemos del meta-lenguaje Meta D++ - el cual posee una sintaxis heredada de C++ y en parte de Java y C# - y el lenguaje Argentino - cuya sintaxis es tipo pascal pero en español, Ok necesito que Lucas Forchino termine esto que me lo prometió :-) - te quiero amigo jeje -, y finalmente más cerca de mediado de año se contará con un clon de C# el cual implementará un subset de la sintaxis de C#.

Esto es posible por la naturaleza modular de LayerD y la necesidad de todo meta-lenguaje de generar código en el lenguaje intermedio Zoe. Es interesante mencionar, que construir un meta-lenguaje para LayerD es relativamente sencillo ya que sólo se requiere programar un analizador léxico y uno sintáctico, luego el compilador Zoe se encarga del resto.

Para no olvidarnos de los problemas que nos pueden traer aparejado tener varias sintaxis para programar en una misma plataforma, la mayoría de los meta-lenguajes podrán traducirse de forma automatizada a otros meta-lenguajes utilizando el compilador Zoe y su proceso de "compilación interactiva" - lo cual es toda otra historia con muchos cuentos interesantes para otro día :-).

Tampoco me olvide de encarar la idiotez sintáctica en los lenguajes de programación y utilizando hojas de estilo se pueden leer los programas escritos en cualquier meta-lenguaje y compilado al código intermedio Zoe con un formato diferente al de escritura y por tanto optimizar la sintaxis para lectura y análisis de un fuente. Poseer una estructura sintáctica diferente para la lectura de un programa LayerD es tan sencillo como contar con una hoja de estilo aplicada al código Zoe que es XML.

Con suerte muchos programadores estarán de acuerdo en terminar con las guerras sintácticas y empezar a utilizar plataformas que permitan decidir que sintaxis utilizar cuando se escribe un programa y que formato visual usar a la hora de leer y examinar programas. LayerD provee un empujón a dicho enfoque permitiendo tener múltiples sintaxis de alto nivel a un costo relativo bajo - desarrollar un meta-lenguaje -, permitiendo traducir entre ellos de forma automatizada y abriendo la puerta para empezar a diferenciar lo que nos conviene a la hora de escribir programas y a la hora de estudiarlos.

Espero comentarios y pensamientos al respecto, si tengo tiempo amplio el post con gráficos y ejemplos de LayerD.

PD: 29/4/2008 se publicará en éste blog o el sitio web de http://layerd.net la primera versión binaria publica de los principales compiladores del framework LayerD así todos pueden empezar a jugar.....y a insultar los bugs.

Wednesday, April 2, 2008

¿Qué diablos es LayerD?

Si ingresaron a esta página por error, o porque alguien más le paso el link pero nunca antes habían escuchado sobre el proyecto LayerD, nunca visitaron su sitio web, o si visitaron su sitio web pero no entendieron nada y no quieren leer durante horas para saber que diablos es esto del proyecto LayerD, intentaré explicarlo en esta entrada lo más sintético posible.

Desde que inicie el proyecto LayerD en su forma actual alrededor del 2002 siempre se me complico a la hora de explicarlo, sus alcances y su razón de ser. De hecho me ha resultado casi imposible poder ponerlo todo de una forma coherente y creíble en un paper de 10 páginas.

He escuchado de todo cada vez que una persona lee algo de la página del proyecto y me cuenta lo que opina o lo que entendió.

Cosas como:
- LayerD es un traductor de código.
- LayerD te permite escribir un programa en .NET y ejecutarlo en una JVM.
- LayerD es un procesador de templates.
- LayerD es basura.
- No entiendo cual es el sentido de hacer tanto lío!!
- LayerD es como .NET pero sirve para Java.
- Que es LayerD es lo mismo que LayerD D++?
- LayerD es un traductor de lenguajes.

La verdad que al escuchar cada una de esas "conclusiones" me daba cuenta lo mal explicado - o lo difícil que es explicarlo en ocasiones - y la verdad es que explicar que es LayerD de una manera sencilla depende del nivel de conocimientos. Si pregunta un estudiante de ingeniería en sistemas o un programador aficionado que sólo a usado lenguajes como Java, .NET, C++, Visual Basic, la respuesta es de una forma. Si pregunta un programador experimentado en lenguajes dinámicos como Lisp, Ruby, Python, Smalltalk la respuesta es más sencilla en cierto punto. Si pregunta una persona con experiencia y conocimientos en meta-programación, lenguajes dinámicos, programación declarativa, intencional u orientación al lenguaje entonces la respuesta es más fácil.

Por tanto voy a responder a la pregunta de ¿Qué diablos es LayerD? teniendo en cuenta estas clasificaciones.

Y si quieren una respuesta lo más escueta posible y exacta la respuesta es:
  • LayerD es un framework que permite desarrollar software realmente abstracto.

Ahora las respuestas para las clasificaciones anteriores, aunque quizás no sea mala idea leerlas a todas:

  • Si conoces sobre meta-programación, programación declarativa, MOPs, paradigmas como orientación al lenguaje y programación intencional: LayerD es un framework compuesto por múltiples lenguajes de alto nivel - los cuales aislan de una sintaxis en particular - y un lenguaje intermedio común denominado lenguaje Zoe el cual posee capacidades de meta-programación completas en tiempo de compilación y una generación de código modularizada. Las capacidades de meta-programación del lenguaje intermedio Zoe permiten desarrollar fácilmente DSLs, nuevas construcciones semánticas y programar cualquier tipo de análisis y transformación en tiempo de compilación utilizando un árbol sintáctico abstracto marcado semánticamente. Los múltiples lenguajes de alto nivel como entrada además de permitir aislar al programador de alto nivel de una sintaxis en particular permiten utilizar de forma sencilla "skins" de lectura teniendo en cuenta que el lenguaje común intermedio (Zoe) es xml. La generación de código es completamente modular y es posible "enchufar" módulos para integrar diferentes runtimes ya sean nativos, maquinas virtuales, interpretes, etc. Por todas estas características LayerD permite utilizar múltiples paradigmas - aunque esta basado en orientación a objetos - y además desarrollar software multiplataforma real.
  • Si conoces sobre lenguajes dinámicos como Smalltalk o Lisp: LayerD posee multiples lenguajes de alto nivel, por tanto se puede programar con diversas sintaxis. Sin embargo, todos los lenguajes de alto nivel generan el mismo código intermedio: código en lenguaje Zoe. El lenguaje Zoe posee en tiempo de compilación - esto es mientras se esta compilando, no en tiempo de ejecución - características "similares" a los lenguajes dinámicos que te permiten examinar y modificar el programa que se esta compilando - obvio que de forma controlada - permitiendo realizar muchas de las cosas que se pueden hacer con un lenguaje dinámico pero mientras se compila el programa, luego en tiempo de ejecución se usa un runtime nativo y estático - a no ser que no querramos - por lo tanto no tiene penalidades de performance en tiempo de ejecución. A diferencia del común de los compiladores la generación de código e importación de tipos esta modularizada, por tanto enchufando modulos para diferentes runtimes puedo utilizar todo lo que ya existe en runtimes existentes como .NET, Java o el API nativa de un sistema operativo. Todas estas herramientas - más otras características - nos otorgan un balance entre la flexibilidad de los lenguajes dinámicos y el rendimiento de los lenguajes estáticos. En LayerD es relativamente sencillo programar lenguajes de dominio especifico, extensiones semánticas y técnicas de programación orientada a aspectos y declarativa. Como el árbol sintáctico en tiempo de compilación posee información semántica es posible realizar multitud de análisis en él.
  • Si es un estudiante o programador en lenguajes "populares" como Java, C++, Visual Basic, C# y no conoce demasiado sobre lenguajes dinámicos o funcionales o meta-programación y paradigmas como la programación declarativa u orientada al lenguaje: Es usted la clase de persona a la cual le costará más llegar a entender LayerD pero por sobre todo llegar a comprender la clase de cosas que es posible programar con esta tecnología. Pero no se impaciente. En primer lugar en LayerD se puede programar en varios lenguajes de alto nivel, y cualquier empresa o persona puede desarrollar su lenguaje de alto nivel para LayerD, esto es comparable a .NET donde se poseen multiples lenguajes y todos generan código intermedio para el mismo runtime - ok JIT compiler jeje. En LayerD todo programa compila a un lenguaje intermedio denominado Zoe, dicho lenguaje posee un compilador modular al cual se le pueden programar "funciones adicionales" y se puede seleccionar la generación e integración con diversos runtimes como una JVM o un .NET runtime o directamente generar código nativo para un sistema operativo y plataforma de hard. Las "funciones adicionales" que se pueden programar en el lenguaje central a LayerD - y por tanto ser compartido por los lenguajes de alto nivel - pueden pensarse como nuevas estructuras semánticas. Por ejemplo, digamos que nuestro lenguaje de alto nivel posee nativamente un ciclo for común, pero no un ciclo for automático para colecciones, en LayerD se puede extender el compilador central para incluir un ciclo for para colecciones. Otro ejemplo, si deseo una instrucción que me permita ejecutar de forma concurrente - en hilos separados - una serie de instrucciones simplemente programo una extensión para el lenguaje Zoe - el lenguaje intermedio común - y utilizo esta nueva funcionalidad en cualquier lenguaje LayerD de alto nivel.
Es difícil decir si estas explicaciones son suficientes, por las dudas enumero algunas de las cosas que nos permite hacer LayerD al programar:

  • Utilizar un sólo lenguaje de alto nivel y hacer programas para diferentes runtimes como JVM, .NET o código nativo.
  • Hacer programas multiplataforma, es decir programas que escribo una vez y compilo para diferentes runtimes. Por ejemplo, un programa que compile nativamente para .NET, Java y código nativo sin ningún cambio en el código fuente.
  • Implementar Lenguajes de Dominio Especifico, como lenguajes para describir interfaces gráficas, lenguajes para describir modelos de entidades con sus relaciones y que implementen automáticamente todo el acceso a datos, lenguajes para chequear reglas de negocios, generar web-services, etc.
  • Hacer análisis de código en tiempo de compilación emitiendo errores, advertencias y notificaciones al programador.
  • Forzar reglas semánticas más estrictas a los programadores de alto nivel mediante una extensión para el compilador. Por ejemplo forzar a cumplir la arquitectura en capas o no utilizar campos públicos.
  • Realizar cualquier proceso de meta-programación durante el proceso de compilación.
  • Crear programas que se corrigen a si mismos durante la compilación y corren en tiempo de ejecución sin penalidades ni errores.
  • Me permite utilizar mis componentes desde diferentes lenguajes de alto nivel con diferentes sintaxis.
  • Permite utilizar una sintaxis para escribir los programas y otras diferentes para leerlos.
  • Permite reutilizar todo el código existente, no se deben volver a escribir librerías!!! se puede usar lo que ya existe en .NET, Java o la plataforma a la cual apuntemos nuestro software.
  • Permite desarrollar "librerías activas", esto es librerías que analizan la forma en la que son usadas en el programa cliente y corrigen su utilización o emiten advertencias y consejos, por que no, librerías que chequean vía Internet la compatibilidad con el programa escrito.
  • Permite desarrollar herramientas RAD de forma independiente al entorno de programación, como herramientas de refactoring o templates de código.
Tal vez, encuentre todo esto como exagerado pero a lo largo de los post en éste blog iré mostrando ejemplos de cada uno de los tópicos y le proporcionare las herramientas básicas para que usted mismo pueda realizarlo.

En estos días sólo tendrá acceso a los binarios de LayerD si es mi amigo :-), si no lo es tendrá que esperar unas semanas, prometo - y siempre trato de cumplir mis promesas - que para fin de mes publicare los binarios que tenga del proyecto LayerD, así en mayo ya podremos empezar con los ejemplos y uds. seguirlos.

No están publicados aún porque se encuentran en desarrollo, sin embargo para su tranquilidad le cuento que ya lo estamos usando en un proyecto de producción real y funcionan lo suficientemente bien como para "dejarse usar". Los fuente se iran liberando en la comunidad open source de a poco, la razón de no liberarlos ahora es muy sencilla, no quiero liberar código que no tenga cierta mínima calidad y nivel de avance en cuanto a la funcionalidad.

De acuerdo a su nivel de conocimiento puede tener mucho que aprender - o no - para explotar LayerD al máximo, sin embargo para empezar a usarlo y beneficiarse de a poco de las técnicas de meta-programación, orientación a aspectos, programación declarativa y custom DSLs no debe aprender nada fundamentalmente nuevo, ya que podrá utilizar todo lo que ya conoce en su plataforma ya sea .NET o Java.

Saludos!