README.md

This commit is contained in:
Tony Garnock-Jones 2015-08-18 12:47:29 -04:00
parent 02c5ee97d3
commit fc971868d9
1 changed files with 66 additions and 0 deletions

66
README.md Normal file
View File

@ -0,0 +1,66 @@
# Prospect: A Networked, Concurrent, Functional Programming Language
Prospect is an actor-based concurrent language able to express
communication, enforce isolation, and manage resources.
Network-inspired extensions to a functional core represent imperative
actions as values, giving side-effects locality and enabling
composition of communicating processes.
Collaborating actors are grouped within task-specific *worlds* (a.k.a.
virtual machines) to scope their interactions. Conversations between
actors are multi-party (using a publish/subscribe medium), and actors
can easily participate in many such conversations at once.
Prospect makes *presence* notifications an integral part of pub/sub
through its *shared dataspaces*, akin to
[tuplespaces](https://en.wikipedia.org/wiki/Tuple_space). Each shared
dataspace doubles as the pub/sub subscription table for its world.
Actors react to *state change notifications* reporting changes in a
dataspace, including new subscriptions created by peers and removal of
subscriptions when a peer exits or crashes. State change notifications
serve to communicate changes in demand for and supply of services,
both within a single world and across nested layers of
worlds-within-worlds. Programs can give up responsibility for
maintaining shared state and for scoping group communications, letting
their containing world take on those burdens.
## The code
This repository contains a [Racket](http://racket-lang.org/) package,
`prospect`, which includes
- the implementation of the `#lang prospect` language, in the
[`prospect` directory](https://github.com/tonyg/prospect/tree/master/prospect/).
- a TCP echo server example, which listens for connections on port
5999 by default, in
[`prospect/examples/echo.rkt`](https://github.com/tonyg/prospect/tree/master/prospect/examples/echo.rkt).
Connect to it using, for example, `telnet localhost 5999`.
- a handful of other examples, in
[`prospect/examples/`](https://github.com/tonyg/prospect/tree/master/prospect/examples/).
## Compiling and running the code
You will need Racket version 6.2.x or later.
Once you have Racket installed, run
raco pkg install prospect
to install the package from the Racket package repository, or
raco pkg install --link `pwd`
from the root directory of the Git checkout to install the package
from a local snapshot. (Alternatively, `make link` does the same thing.)
This will make `#lang prospect` available to programs.
At this point, you may load and run any of the example `*.rkt` files
in the
[`prospect/examples/`](https://github.com/tonyg/prospect/tree/master/prospect/examples/)
directory.
## Copyright
Copyright © Tony Garnock-Jones 2010, 2011, 2012, 2013, 2014, 2015.