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
Vincent St-Amour c3574966bc Add feature-specific profiling support. 2014-05-01 14:34:05 -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 Racket requirement. 2013-10-06 14:21:07 -04: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 Add feature-specific profiling support. 2014-05-01 14:34:05 -04: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 Add instrumentation for feature-specific-profiling. 2014-05-01 14:31:59 -04:00
profiling.rkt Add feature-specific profiling support. 2014-05-01 14:34:05 -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 Single-collection package. 2013-07-17 12:22:03 -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 5.90.x 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 © Tony Garnock-Jones 2010, 2011, 2012, 2013.