Raku Land

Actor

cpan:LEONT

Build Status

NAME

Actor - an actor model threading library

SYNOPSIS

use v6.d;
use Actor;

my $actor = spawn {
    receive-loop
        -> Str $message, Actor::Handle $other {
            say "Message $message";
            $other.send($message);
        },
        -> Int :$number, Str :$message {
            say "Message $message" if $number %% 7;
        },
        -> "stop" {
            last;
        };
}

$actor.send("message", self-handle);
receive
    -> Str $message {
        $actor.send(:42number, :$message);
        $actor.send("stop");
    };

await $actor;

DESCRIPTION

Actor is a module that implements actor model threading for Raku.

actors are …

INTERFACE

module Actor

spawn(&starter, *@args, Bool :$monitored --> Handle:D)

This starts a new actor that calls &starter with @args as its arguments, and returns a handle to that actor. If $monitored is true, it will also set up a monitor from the new actor to the current one.

receive(*@handlers --> Nil)

This will loop through the messages in the queue, and for each message will try to match it in turn to each of the @handlers passed to it. If it matches it is taken from the queue and the handler is called with it. Then receive returns.

If no such matching message exists, it will wait for a new message to arrive that does match a handler, pushing any non-matching messages to the queue.

receive-loop(*@handlers --> Nil)

This will call receive in a loop with the given handlers, until one of the handlers calls last.

self-handle(--> Handle:D)

This returns a handle to the current actor.

class Actor::Handle

This class represents a handle to an actor

send(|message --> Nil)

This will send |message to that actor.

alive(--> Bool:D)

This returns true if the actor is still alive.

add-monitor(handle = self-handle --> Handle::MonitorId)

This sets up a monitor relationship from the invocant handle to the one passed to add-monitor (defaulting to the current handle)

remove-monitor(Handle::MonitorId $monitor)

This removes a monitor from the monitor list of this actor.

monitors

Monitors are watchers on an actor's status. If the actor ends successfully, a message like this is sent:

(Actor::Exit, $handle, $return-value)

If it dies in an exception, the follow message is sent to the monitoring actor instead.

(Actor::Error, $handle, $exception)

AUTHOR

Leon Timmermans fawaka@gmail.com

COPYRIGHT AND LICENSE

Copyright 2020 Leon Timmermans

This library is free software; you can redistribute it and/or modify it under the Artistic License 2.0.