Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

Lambra is an experiment to implement a functional, distributed Lisp on the Rubinius VM.

branch: master

Fetching latest commit…

Octocat-spinner-32-eaf2f5

Cannot retrieve the latest commit at this time

Octocat-spinner-32 bin
Octocat-spinner-32 examples
Octocat-spinner-32 lib
Octocat-spinner-32 spec
Octocat-spinner-32 .gitignore
Octocat-spinner-32 .rvmrc
Octocat-spinner-32 .travis.yml
Octocat-spinner-32 Gemfile
Octocat-spinner-32 LICENSE
Octocat-spinner-32 README.md
Octocat-spinner-32 Rakefile
Octocat-spinner-32 lambra.gemspec
README.md

lambra Build Status

Lambra is an experiment to implement a functional, distributed Lisp on the Rubinius Virtual Machine, much à la Erlang.

Architecture

Lambra processes are much like Erlang's, but implemented as native OS threads. They share absolutely no memory, and behave like actors: they communicate via their mailboxes.

A simple echo program with actors

(defn echo []
  (receive
    [pid msg] (send pid self msg)))

(let [echo-pid (spawn echo)]
  (send echo-pid self "Hello world!")
  (receive
    [pid msg] (print msg)))

The actor primitives in Lambra are receive and send.

receive blocks until a message in the mailbox can be processed, then pattern matches ([pid msg] is a catch-all clause) and executes the form that matched.

send sends a message to the mailbox of an actor. It just needs its pid, and the rest of the arguments will be sent as a message. It is a convention for the first argument of the message to be the sender's pid, but it is in no way necessary.

self is the current process' pid.

Credits

The structure for this first version is taken from Brian Shirai's Poetics.

Joe Armstrong for his Programming Erlang book, and well, for Erlang.

Who's this

This was made by Josep M. Bach (Txus) under the MIT license. I'm @txustice on twitter (where you should probably follow me!).

Something went wrong with that request. Please try again.