Home

Awesome

Build Status

Swish Concurrency Engine

The Swish Concurrency Engine is a framework used to write fault-tolerant programs with message-passing concurrency. It uses the Chez Scheme programming language and embeds concepts from the Erlang programming language. Swish also provides a web server.

Design

The latest design document can be found here.

Swish uses libuv for cross-platform asynchronous I/O.

Although Swish can be run in threaded Chez Scheme for convenience, it is not thread safe and should be used from the main thread only.

Versioning

Swish follows the semantic versioning scheme, starting with 2.0.0 to avoid confusion with internal projects.

Odd minor-version numbers are used for development. As such, we are extremely unlikely to use a patch number other than 0 during development.

Even minor-version numbers are used for official tagged releases.

The first commit after an official tagged release should increment either the minor-version or patch-version number so that the version number for an official tagged release corresponds to a unique commit hash.

Notes

  1. install the prerequisites (see Build System Requirements)
  2. ./configure (see ./configure --help for options)
  3. make
  4. make test

Build System Requirements

Linux

Mac

Windows

Stand-alone Swish Applications

Swish can be used to build, test, and deploy stand-alone applications. A given application might load foreign code for image processing or USB access. Code that may block should use the API described in the "Operating System Interface" chapter of the documentation to integrate with Swish's I/O loop.

Build

For details about building a Swish application, see: swish-build --help

Test

For details about testing a Swish application, see: swish-test --help

Deploying a Stand-alone Application

On Linux and macOS, you can deploy your application's executable and boot file.

On Windows, your install should include the application's executable and boot file, osi.dll, uv.dll, sqlite3.dll, Chez Scheme's csv964.dll or the csv*.dll for the version you are using, and Microsoft's C Runtime Library vcruntime140.dll.

You can define most applications entirely in Scheme, using the Swish libraries. If you need to integrate C code that relies on Swish exports, clone the Swish repository and run configure. This generates a src/swish/Mf-config that your makefile can include to define variables for system-specific paths. Swish's source repository provides swish.h to define callable exports for osi.dll.