common-lisp-actors

2019年11月30日

No Description

Author

Naveen Sundar G. <naveensundarg@gmail.com>

License

BSD

This is a simple and easy to use Actor system in Common Lisp.

Set-Up

Requires Bordeaux threads. http://common-lisp.net/project/bordeaux-threads/ 2. Just load actors.lisp and start using it. If you have Quicklisp, (ql:quickload "cl-actors")

Usage

A small manual can be found at : http://www.cs.rpi.edu/~govinn/actors.pdf

  • Creating an actor class or template

    (defactor Actor-Class
    (state)(message-vars) behavior)
  • Creating an actor instance

    (setq my-actor (Actor-Class(:state-var_1 value_1 ...
    :state-var_n value_n)))
  • Sending a message

    (send my-actor message_args)

Features

  1. Concurrency using the actors model.
  2. Dynamic behavior change of actors.

Examples

  • A ticker: Keeps printing out a count every 2 seconds, starting from 0 and incrementing it every 2 seconds.
;create the ticker template(defactor ticker ((counter0))(m)(sleep2)(pr counter)(incf counter)(send self nil) next); Create an instance(setf t1 (ticker)); send a message (async)(send t1 nil); to stop use(stop-actor t1)
  • A print actor: Prints the message which was sent to it. A very useful utility actor.
;create the actor template(defactor print-actor ()(val)(pr val) next); initialize a new instance(setf printer (print-actor));send values for printing(send printer "hello, world")
  • A factorial computing actor : The name says it all :)
;create the template(defactor fact ((temp1))(n cust)(if(equal1 n)(progn(send cust (* temp 1))(setf temp 1) next)(progn(setf temp (* n temp))(send self (- n 1) cust) next)));create a new instance (setf f (fact)); send a value(send f 4 print-actor)
  • A nagger for fun : Works only in Mac OS X. Keeps saying out aloud "please work" every 10 seconds :)
(defactor nagger ()()(sleep10)(trivial-shell:shell-command"say please work")(send self) next); anonymous actor , no way to stop the nagging (send(nagger))

More Resources

  1. Meta-Circular Adventures in Functional Abstraction

The wonderful and detailed original blog post is no longer availabe. The link below points to a snaphost. https://hackerfall.com/story/challenging-clojure-in-common-lisp

Dependencies (1)

Dependents (0)

AltStyle によって変換されたページ (->オリジナル) /