blog.pauloasilva.com

Category Archives: erlang

Um 2009 cheio de concorrência

Inspirado no repto lançado pela Adobe, deixo os meus votos para o ano de 2009 em 26 linhas de pura concorrência ;)

-module(newYear).
-export([start/0,newLife/0,happiness/0,health/1,work/0]).
start() -> spawn(newYear,newLife,[]).
newLife() -> spawn(newYear,happiness,[]).
happiness() ->
    WorkPid = spawn(newYear,work,[]),
    HealthPid = spawn(newYear,health,[WorkPid]),
    HealthPid ! go.
health(WorkPid) ->
    receive
        go ->
            io:format("Healthy..."),
            WorkPid ! {self(),go},
            health(WorkPid);
        ill ->
            io:format("I'm ill..."),
            WorkPid ! {self(),stop}
    end.
work() ->
    receive
        {HealthPid,go} ->
            io:fwrite(" and working~n"),
            HealthPid ! go,
            work();
        stop -> io:format(" so I'll stop working!~n")
    end.

Erlang

Erlang é uma linguagem de programação desenvolvida nos laboratórios de ciências da computação da Ericsson em 1987 com características geralmente associadas aos sistemas operativos (concorrência, gestão de memória etc).

Trata-se de uma linguagem funcional, dinamicamente tipada, desenhada tendo em vista as aplicações distribuídas non-stop, cuja implementação original corria código máquina virtual. Actualmente existe uma versão Open-Source totalmente documentada e publicada ao abrigo da licença EPL (derivada da Mozilla Public License).

A componente de concorrência é sem dúvida um ponto forte desta linguagem incorporando um mecanismo simples de processos e comunicação entre estes.

-module(helloWorld).
-export([helloWorld/0]).
helloWorld() -> io:fwrite("hello, world").

Edit: Abaixo os dois módulos para download criados para ajudar o Dhérsy Gabreil