AjSharp Distribuido: un roadmap

Published on Author lopezLeave a comment

El pasado fin de semana, estuve agregando características a mi intérprete de código abierto AjSharp, para que comenzara a soportar ejecución distribuida. Escribí sobre el tema en:

Distributed AjSharp: First Steps
AjSharp Distribuido: Primeros Pasos

(más post en español http://msmvps.com/blogs/lopez/archive/tags/AjSharp/default.aspx)
(más post en inglés/Anglish (Angel´s English 🙂 http://en.wordpress.com/tag/ajsharp/)

En esta semana pasada, escribí más código para soportar la ejecución distribuida de una aplicación AjSharp. Es un “work in progress”. De alguna manera, es la continuación de mi trabajo con aplicaciones distribuidas, que comenzó luego de mi trabajo con Fabriq, antes un poco con AjServer,  luego con AjMessages, y así. La escritura de un intérprete propio permite extender el lenguaje para soportar características que tal vez se complicarían de implementar en lenguajes tipados, compilados.

En este post, quiero escribir una lista de features que me gustaría agregar (algunas ya están agregadas en el código de trunk, pero tengo que revisarlas, probarlas mejor y escribir posts sobre cómo usarlas y cómo funcionan). Antes, algunas aclaraciones de nomenclatura:

Machine.Current es un objeto base que mantiene el Environment global (Machine.Current.Environment), que contiene los nombres/valores de las variables globales, las definiciones de las clases, funciones globales, etc.. Host es un objeto que expone una Machine para que sea accedida desde otros Host. Machine es un concepto básico de AjSharp/AjLanguage. Host es lo que le agrega funcionalidad de comunicación remota.

Esta es la lista de lo que quiero implementar:

– Arrancar un host local en una dirección (máquina física, puerta)

– Conetar con un host remoto dada una dirección

– Conectar a un host remoto y enviarle la dirección de un host (local o remoto) para que pueda ubicarlo y enviarle trabajo

– Ejecutar un callback (función, rutina) local cuando un host local reciba la dirección de un nuevo host existente en alguna máquina (una especie de OnRegisterHost).

– Enviar un comando definido localmente (en el programa enviador) a un host remoto, y ejecutar en ese host remoto.

– Enviar una expresión definida localmente a un host remoto y evaluarla en ese host remoto, retornando un resultado al host llamador.

– Enviar una función/subrutina definida localmente, a un host remoto, enviarle parámetros y evaluarla/ejecutarla en el host remoto.

– Enviar un texto al host remoto, parsearlo y ejecutarlo como comando.

– Enviar un texto al host remoto, parsearlo y evaluarlo como expresión, devolviendo un resultado.

– Enviar el contenido de un archivo local a un host remoto, parsearlo y ejecutarlo.

– Obtener la lista de host locales registrados en la máquine (machine) actual.

– Obtener la lista de host remotos registrados en la Machine.Current.

– Enviar un valor local a una variable o left value expression a un host remoto.

– Enviar una copia de un DynamicObject a un servidor remoto (tengo que resolver qué pasas si es DynamicObject con una clase asociada)

– Enviar una referencia a un objeto DynamicObject al host remoto, para usarla allá como un proxy al objecto original, que sigue residiendo en el host local.

– Enviar una copia de un agente a un host remoto, y arrancarlo para que ejecute tareas allá.

– Exportar un archivo local con código fuente AjSharp, para ser usado en cualquier Include(“…”) que aparezca en el proceso de parseo del host remoto.

– Exportar un assembly local a un host remoto (tengo que decidir si ahora necesito o no esta feature, interesante).

Otro punto más:

– Una aplicación de ejemplo, como “proof of concept”. Podría ser un web crawler distribuido, o la implementación de un algoritmo genético distribuido.

Pueden ver el progreso en:

http://code.google.com/p/ajcodekatas/source/browse/#svn/trunk/AjLanguage

Agregando todas estas features, y tener además go routines, futures, channels, y agentes, está haciendo interesante a este proyecto. Y me estoy “divigtiendo como loco” :-):-)

Nos leemos!

Angel “Java” Lopez
http://www.ajlopez.com
http://twitter.com/ajlopez

Leave a Reply

Your email address will not be published. Required fields are marked *