Thursday, August 7, 2008

Programación Concurrente con LayerD

Los lenguajes LayerD actuales no definen prácticamente ninguna librería de base. Esto no es sin embargo un problema ya que LayerD está diseñado para utilizar la infraestructura de los entornos de ejecución y librerías actuales como ensamblados .NET o cualquier librería Java.

Naturalmente se puede programar sistemas concurrentes usando las librerías disponibles en las plataformas que soporten los Generadores de Código Zoe de los cuales dispongamos. Adicionalmente, y quizás mucho más interesante, al ser Meta D++ un lenguaje "extensible" (a través de classfactorys y gracias al lenguaje intermedio Zoe) es posible desarrollar "estructuras" que nos permitan programar este tipo de sistemas de manera más sencilla.

A modo de ejemplo posteo uno de los escuetos ejemplos del SDK donde se muestra una sencilla estructura que permite ejecutar una secuencia de instrucciones en paralelo (para .NET):

using Zoe::DotNET::Utils;
// Uso el Main de consola por defecto para .NET, si gusta puede usar el Main tradicional :-)
Zoe::ConsoleProgram::New{
    // Diga Hola!!
    Console::WriteLine("Welcome to new semantic structures with LayerD !!");
    //Ejecutar instrucciones en hilos separados
    Concurrent::ExecuteParallel{
        //En un hilo cuento cosas
        for(int n=0;n<40000001;n++)
            if(n%20000000==0)Console::WriteLine("I am on "+n+".");
        //En otro hilo cuento dos cosas :-)
        {
            for(int n=0;n<40000001;n++)
                if(n%2000000==0)Console::WriteLine("You are on "+n+".");
            for(int n=0;n<40000001;n++)
                if(n%2000000==0){
                    Console::WriteLine("We are on "+n+".");
                }
        }
    };
    Console::Read();
    // Fin
};

El ejemplo superior ejecutara cada instrucción dentro del bloque "Concurrent::ExecuteParallel" en un hilo diferente.

Este ejemplo sólo corre en .NET porque esta implementado usando sólo la librería de dicho entorno de ejecución. La buena noticia es que junto a mi amigo (el Ingeniero) Pablo Frias vamos a estar desarrollando en los próximos meses una librería para programación concurrente en LayerD que sea además multiplataforma (al menos Java y .NET) e incluya estructuras de "alto nivel" como tareas, ciclos paralelos, etc.

Pueden ver este ejemplo en el SDK, el cliente y la classfactory. Saludos.