Historical interest only: A Dataspace-like language and system that led to "Network Calculus" (ESOP 2014) and minimart-2014, in turn a predecessor to Syndicate. https://syndicate-lang.org/papers#gjthf-esop14
Go to file
Leif Andersen fc6e09d6d9 Marketplace works with Racket 6.1. 2014-09-22 16:18:17 -04:00
drivers Fix egregious old errors 2013-07-17 12:33:32 -04:00
examples Correct long-languishing renaming oversight 2014-03-09 15:44:16 -04:00
lang Fix silly bug in module-begin for #lang marketplace. Closes #3 2013-10-30 16:50:34 +00:00
scribblings Relative path updated for single-collection package 2013-07-17 12:23:57 -04:00
support Avoid now-problematic TR contracts 2014-01-20 21:08:03 -05:00
.gitignore Single-collection package. 2013-07-17 12:22:03 -04:00
Makefile Single-collection package. 2013-07-17 12:22:03 -04:00
README.md Update README.md 2014-08-06 09:52:26 -07:00
action-add-endpoint.rkt Single-collection package. 2013-07-17 12:22:03 -04:00
action-delete-endpoint.rkt Single-collection package. 2013-07-17 12:22:03 -04:00
action-quit.rkt Single-collection package. 2013-07-17 12:22:03 -04:00
action-send-message.rkt Single-collection package. 2013-07-17 12:22:03 -04:00
action-spawn.rkt Single-collection package. 2013-07-17 12:22:03 -04:00
actions.rkt Single-collection package. 2013-07-17 12:22:03 -04:00
ground.rkt Accommodate a recent change to typed-racket syntax 2014-02-18 18:43:34 -05:00
info.rkt Single-collection package. 2013-07-17 12:22:03 -04:00
list-utils.rkt Single-collection package. 2013-07-17 12:22:03 -04:00
log-typed.rkt Single-collection package. 2013-07-17 12:22:03 -04:00
log-untyped.rkt Single-collection package. 2013-07-17 12:22:03 -04:00
main.rkt Single-collection package. 2013-07-17 12:22:03 -04:00
nested.rkt Single-collection package. 2013-07-17 12:22:03 -04:00
opaque-any.rkt Single-collection package. 2013-07-17 12:22:03 -04:00
process.rkt Marketplace works with Racket 6.1. 2014-09-22 16:18:17 -04:00
quasiqueue.rkt Single-collection package. 2013-07-17 12:22:03 -04:00
roles.rkt Single-collection package. 2013-07-17 12:22:03 -04:00
struct-map.rkt Single-collection package. 2013-07-17 12:22:03 -04:00
sugar-endpoints-support.rkt Single-collection package. 2013-07-17 12:22:03 -04:00
sugar-endpoints-typed.rkt Single-collection package. 2013-07-17 12:22:03 -04:00
sugar-endpoints-untyped.rkt Single-collection package. 2013-07-17 12:22:03 -04:00
sugar-typed.rkt Single-collection package. 2013-07-17 12:22:03 -04:00
sugar-untyped.rkt Single-collection package. 2013-07-17 12:22:03 -04:00
sugar-values.rkt Single-collection package. 2013-07-17 12:22:03 -04:00
test-struct-map-typed.rkt Single-collection package. 2013-07-17 12:22:03 -04:00
test-struct-map.rkt Single-collection package. 2013-07-17 12:22:03 -04:00
tr-struct-copy.rkt Single-collection package. 2013-07-17 12:22:03 -04:00
types.rkt Marketplace works with Racket 6.1. 2014-09-22 16:18:17 -04:00
unify.rkt Single-collection package. 2013-07-17 12:22:03 -04:00
vm.rkt Single-collection package. 2013-07-17 12:22:03 -04:00

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

Compiling and running the code

You will need Racket version 6.1.x or later.

Once you have Racket installed, run

raco pkg install marketplace

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 marketplace available to programs.

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 © Tony Garnock-Jones 2010, 2011, 2012, 2013, 2014.