syndicate-2017/README.md

67 lines
2.7 KiB
Markdown
Raw Normal View History

2015-08-18 16:47:29 +00:00
# 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.
2016-01-18 19:29:48 +00:00
Collaborating actors are grouped within task-specific *networks* (a.k.a.
2015-08-18 16:47:29 +00:00
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
2016-01-18 19:29:48 +00:00
dataspace doubles as the pub/sub subscription table for its network.
2015-08-18 16:47:29 +00:00
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,
2016-01-18 19:29:48 +00:00
both within a single network and across nested layers of
networks-within-networks. Programs can give up responsibility for
2015-08-18 16:47:29 +00:00
maintaining shared state and for scoping group communications, letting
2016-01-18 19:29:48 +00:00
their containing network take on those burdens.
2015-08-18 16:47:29 +00:00
## 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.3 or later.
2015-08-18 16:47:29 +00:00
Once you have Racket installed, run
raco pkg install prospect
to install the package from the Racket package repository, or
2015-10-21 13:26:43 +00:00
raco pkg install
2015-08-18 16:47:29 +00:00
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
2016-01-30 16:39:05 +00:00
Copyright © Tony Garnock-Jones 2010, 2011, 2012, 2013, 2014, 2015, 2016.