nuxScript

⚡ 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çãoDescriçãoExemplo
actor(behavior)Cria actoractor(fn)
send_to(actor, msg)Envia mensagemsend_to(a, "msg")
tell(actor, msg)Alias para sendtell(a, "msg")
ask(actor, msg)Pergunta asyncask(a, "get")
stop(actor)Para actorstop(a)
actors()Lista actorsactors()
channel()Cria channelchannel()
sleep(ms)Esperasleep(1000)