⚡ Concurrency Avançada
Actors, Channels e CSP-style - como Elixir/Erlang
Actors
// Criar actor
let counter = actor(fn(state, msg, update) =>
match msg
"inc" -> update(state + 1)
"dec" -> update(state - 1)
"get" -> state
end
end)
// Enviar mensagem
send_to(counter, "inc")
tell(counter, "inc")
// Async ask
let result = ask(counter, "get")
Channels
// Criar channel
let ch = channel()
// Buffer opcional
let buffered = channel_buffer(10)
// Enviar
send_to(ch, "hello")
// Receiver
receive_from(ch, fn(msg) => print(msg))
// Poll (não-blocking)
let msg = poll(ch)
// Close
close(ch)
Select (alternatives)
// Wait em múltiplos channels
select(
channel1 => receive_from(channel1, handle1),
channel2 => receive_from(channel2, handle2)
)
// Shorthand
alts(channel1, channel2, channel3)
Processos
// Spawn processo
let proc = spawn(fn() =>
loop
print("running")
sleep(1000)
end
end)
// Kill
kill(proc)
// Kill all
killall()
Built-ins
| Função | Descrição | Exemplo |
|---|---|---|
actor(behavior) | Cria actor | actor(fn) |
send_to(actor, msg) | Envia mensagem | send_to(a, "msg") |
tell(actor, msg) | Alias para send | tell(a, "msg") |
ask(actor, msg) | Pergunta async | ask(a, "get") |
stop(actor) | Para actor | stop(a) |
actors() | Lista actors | actors() |
channel() | Cria channel | channel() |
sleep(ms) | Espera | sleep(1000) |