82aaa12c4e | ||
---|---|---|
drivers | ||
examples | ||
lang | ||
scribblings | ||
support | ||
.gitignore | ||
Makefile | ||
README.md | ||
action-add-endpoint.rkt | ||
action-delete-endpoint.rkt | ||
action-quit.rkt | ||
action-send-message.rkt | ||
action-spawn.rkt | ||
actions.rkt | ||
ground.rkt | ||
info.rkt | ||
list-utils.rkt | ||
log-typed.rkt | ||
log-untyped.rkt | ||
main.rkt | ||
nested.rkt | ||
opaque-any.rkt | ||
process.rkt | ||
quasiqueue.rkt | ||
roles.rkt | ||
struct-map.rkt | ||
sugar-endpoints-support.rkt | ||
sugar-endpoints-typed.rkt | ||
sugar-endpoints-untyped.rkt | ||
sugar-typed.rkt | ||
sugar-untyped.rkt | ||
sugar-values.rkt | ||
test-struct-map-typed.rkt | ||
test-struct-map.rkt | ||
tr-struct-copy.rkt | ||
types.rkt | ||
unify.rkt | ||
vm.rkt |
README.md
Marketplace: Bringing the Network into the Programming Language
Marketplace is a 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 programs are grouped within task-specific virtual machines (VMs) to scope their interactions. Conversations between programs are multi-party (using a publish/subscribe medium), and programs can easily participate in many such conversations at once.
Marketplace makes presence notifications an integral part of pub/sub. Programs react to presence and absence notifications that report the comings and goings of their peers. Presence serves to communicate changes in demand for and supply of services, both within a VM and across nested VM layers. Programs can give up responsibility for maintaining presence information and for scoping group communications to their containing VM.
Documentation
A (draft) manual for Marketplace is available here.
The code
This repository contains a Racket package,
marketplace
, which includes
-
the implementation of the
#lang marketplace
language, in the top directory. -
a TCP echo server example, in
examples/echo-paper.rkt
. -
a TCP chat server example, in
examples/chat-paper.rkt
. -
Haskell, Erlang and Python implementations of the chat server for comparison, in
examples/chat.hs
,chat.erl
, andchat.py
respectively.
Compiling and running the code
You will need Racket version 5.3.4.11 or later.
Once you have Racket installed, run
raco pkg install --link `pwd`
from the root directory of the Git checkout to install the package in
your Racket system. (Alternatively, make link
does the same thing.)
This will make #lang marketplace
available to programs.
It will take several minutes to compile the code. On my Macbook Air, it takes around 10 minutes; on my ridiculously fast desktop machine, it still takes around 2 minutes.
At this point, you may load and run any of the example *.rkt
files
in the
examples/
directory.
Note that both the echo server and chat server examples do not print
any output on standard output: instead, they simply start running and
silently await TCP connections. Once one of the servers is running, in
a separate window, try telnet localhost 5999
.
Note also that both the echo server and the chat server use port 5999, so you cannot run both simultaneously.
Copyright
Copyright © Tony Garnock-Jones 2010, 2011, 2012, 2013.