aprendiendo ( Erlang ).

jueves, 26 de mayo de 2011

Hola mundo en Erlang (II). Ahora con procesos.

| 0 comentarios |

Hasta el momento siempre hemos trabajado con un paradigma funcional puro, pero el punto fuerte de Erlang son los procesos, el paradigma orientado a procesos, y vamos a empezar a usarlos. Como es de rigor vamos a realizar un hola mundo pero esta vez con procesos. Veamos el código ...
-module(hola_proceso).
-export([start/0]).

start() -> 
    spawn(fun loop/0).

loop() ->
    receive
        {saluda_a, Nombre } ->
            io:format("Hola ~s~n", [Nombre]),
            loop();
        saluda ->
            io:format("Hola mundo~n",[]),
            loop();
        adios ->
            io:format("Nos vemos~n")
    end.
Lo primero que nos resulta extraño, es el uso de la instrucción spawn en la función start/0. Esta instrucción en sus múltiples variantes nos permite crear procesos Erlang devolviendo su PID. En este caso, el proceso esta encapsulado en la función loop/0.
Lo segundo que nos resulta extraño es, en sí, la implementación de la función proceso loop/0. La función loop/0 implementa un receive que es una especie de case para mensaje recibidos. Es decir, que se evaluará cuando el proceso reciba un mensaje (a modo de un case), y mientras tanto permanecerá dormido hasta que este llegue.
Lo tercero que nos resulta extraño es ... que después de procesar un mensaje se ejecute loop/0, menos en el mensaje adios. Con ello, determinamos si deseamos seguir recibiendo mensajes o damos por terminado el proceso.
Veamos como funciona:
1> c(hola_proceso).
{ok,hola_proceso}
2> Hijo = hola_proceso:start().
<0.42.0>
3> Hijo!saluda.
Hola mundo
saluda
4> Hijo!{saluda_a, "Juan"}.
Hola Juan
{saluda_a,"Juan"}
5> Hijo!adios.
Nos vemos
adios
6> Hijo!adios.             
adios
A parte de compilar, lo primero es crear el proceso con la función start/0 y guardarlo para poderlo usar. En nuestro caso la variable Hijo tiene el identificador de proceso (PID) que nos servirá para pasarles los mensajes al proceso.
Para enviar mensajes a un proceso utilizaremos una construcción del tipo PID!mensaje. Por ejemplo, Hijo!saluda envía el mensaje saluda al proceso que despertará y evaluará el receive procesando el mensaje correspondiente.
Como tenemos un Hijo muy, muy educadito. Cuando le decimos que salude saluda, cuando le indicamos que salude a otra persona también lo hace y cuando le indicamos que se despida dice adios.
Seguiremos con los proceso más en profundidad en futuros post's, y no olviden mineralizarse y vitaminarseeeee....

Publicar un comentario en la entrada

0 comentarios:

 
Licencia Creative Commons
Aprendiendo Erlang por Verdi se encuentra bajo una Licencia Creative Commons Atribución-NoComercial-CompartirIgual 3.0 Unported.