aboutsummaryrefslogtreecommitdiff
path: root/stdlib/source/documentation/lux/control/concurrency/actor.lux
blob: 96211d7bae3a858fb9275824966c9ed81d032d89 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
(.using
 [library
  [lux (.except if loop)
   ["$" documentation (.only documentation:)]
   [data
    [text (.only \n)
     ["%" \\format (.only format)]]]
   [macro
    ["[0]" template]]]]
 [\\library
  ["[0]" /]])

(documentation: (/.Actor state)
  "An entity that can react to messages (mail) sent to it concurrently.")

(documentation: (/.Mail state)
  "A one-way message sent to an actor, without expecting a reply.")

(documentation: (/.Obituary state)
  "Details on the death of an actor.")

(documentation: (/.Behavior state)
  "An actor's behavior when mail is received.")

(documentation: /.spawn!
  "Given a behavior and initial state, spawns an actor and returns it.")

(documentation: /.obituary
  "Await for an actor to stop working.")

(documentation: /.mail!
  "Send mail to an actor.")

(documentation: (/.Message state output)
  "A two-way message sent to an actor, expecting a reply.")

(documentation: /.tell!
  "Communicate with an actor through message-passing.")

(documentation: /.default
  "Default actor behavior.")

(documentation: /.poison!
  (format "Kills the actor by sending mail that will kill it upon processing,"
          \n "but allows the actor to handle previous mail."))

(documentation: /.Stop
  "A signal to stop an actor from observing a channel.")

(documentation: /.observe!
  (format "Use an actor to observe a channel by transforming each datum"
          \n "flowing through the channel into mail the actor can process."
          \n "Can stop observing the channel by executing the Stop value."))

(.def: .public documentation
  (.List $.Module)
  ($.module /._
            "The actor model of concurrency."
            [..Actor
             ..Mail
             ..Obituary
             ..Behavior
             ..spawn!
             ..obituary
             ..mail!
             ..Message
             ..tell!
             ..default
             ..poison!
             ..Stop
             ..observe!
             ($.default /.poisoned)
             ($.default /.dead)
             ($.default /.alive?)
             ($.default /.obituary')]
            []))