occam-pi: blending the best of CSP and the pi-calculus

[ news | occam-pi | download | documentation | bugs | coming-soon | publications | links ]

Occam-pi and KRoC are the result of on-going research extending the (CSP) ideas of occam by judicious inclusion of the mobility features of the pi-calculus. In the interests of proveability, we have been careful to preserve the distinction between the original simple static point-to-point synchronised communication of occam and the dynamic asynchronous multiplexed communication of the pi-calculus; in this we have been prepared to sacrifice the elegant sparsity of the pi-calculus. We conjecture that the extra complexity (and discipline) introduced will make the task of proving concurrent and distributed programs easier.

The Kent Retargetable occam Compiler (KRoC) is an occam/occam-pi language platform, comprised of an occam compiler, native-code translator and supporting run-time system.

This page documents the open-source (GNU General Public License (GPL) and Library General Public License (LGPL)) version of KRoC, currently supporting Intel/i386 based machines running Linux or FreeBSD. Binary releases of older versions of KRoC (that do not support the occam-pi extensions) are available for Solaris/SPARC, OSF/Alpha and Parsytec/PowerPC, from the WoTUG site.

CSP has a compositional and denotational semantics, which means that it allows modular and incremental development (refinement) even for concurrent components. In turn, this means that we get no surprises when we run processes in parallel (since their points of interaction have to be explicitly handled by all parties to these interactions). This is simply not the case for standard threads-and-locks concurrency, which have no formal denotational semantics and by which we get surprised all the time.

However, we need some extensions to describe certain new dynamics - and this is where we turn to the pi-calculus. Specifically, we want to allow networks of processes to evolve, to change their topologies, to cope with growth and decay without losing semantic or structural integrity. We want to address the mobility of processes, channels and data and understand the relationships between these ideas. We want to retain the ability to reason about such systems, preserving the concept of refinement.

This version of the occam compiler supports the new occam-pi version of the language. New features include:

MOBILE and non- MOBILE barriers

and non- barriers MOBILE process types, communications and assignment

process types, communications and assignment MOBILE channel types, communications and assignment

channel types, communications and assignment MOBILE data types, communications and assignment

data types, communications and assignment run-time sized MOBILE arrays

arrays run-time sized PAR replicators

replicators FORK ed dynamic process creation

ed dynamic process creation self-recursion for PROC s

s usage of user PROTOCOL s in other PROTOCOL definitions

s in other definitions variant (tagged) PROTOCOL inheritance

inheritance process priority support for 32 levels of priority

user-defined channels for interfacing channel communications with external code

a new code generator with various levels of optimisation

better integration of user code and the run-time kernel

undefined (and unassigned) variable usage checks

70 nano-seconds context-switch/communication time (on an 800 MHz. P3)

20 nano-seconds process startup/shutdown time (on an 800 MHz. P3)

extended rendezvous

STEP sizes for replicators: e.g. `` PAR i = <start> FOR <count> STEP <stride> ''

sizes for replicators: e.g. `` '' array constructor expressions: e.g. `` x := [i = 0 FOR SIZE x | f (i)] ''

'' channel direction specifiers: e.g. `` PROC foo (CHAN OF INT in?, out!) ''

'' the OF keyword is now optional: e.g. `` PROC foo (CHAN INT in?, out!) ''

More information relating to the new langauge extensions for occam-pi. Additional information on KRoC, including a reference manual (currently mostly occam, not occam-pi), standards for the new occamdoc tool, development notes and other can be found on the Programming Languages and Systems Group Wiki.

KRoC project home-page, providing more details on the KRoC project.

Installation instructions for newer versions of KRoC.

kroc-dev mailing-list available for discussion/announcements about KRoC development.

The open-source version of KRoC is available as a tarball:

14/01/2006: KRoC 1.4.0 latest stable version (Linux/i386, FreeBSD/i386, Cygwin/i386):

kroc-1.4.0.tar.gz (6.67 M), kroc-1.4.0.tar.bz2 (4.20 M)

Note: This version is now quite old. If you intend to use the newer features of the language, we'd recommend you follow the instructions here, to install a newer version of KRoC.

Once downloaded, unpack the tarball, change into the ` kroc- version' directory and run the ` build ' script to compile and install KRoC:

bash$ tar -xvzf kroc-1.4.0.tar.gz kroc-1.4.0/ kroc-1.4.0/build bash$ cd kroc-1.4.0 bash$ ./build KRoC installation configuration 1-7 to change path, A-E to toggle/set feature, Ctrl-C to abort, return to confirm and install:

By default, KRoC will install itself in the source-tree. To select a different installation directory, enter 1 at the prompt, and when prompted again, type the desired directory. Other parts of the configuration may be set in a similar way. To install with the default settings, simply press return. The build process can be aborted at any time by pressing Ctrl-C -- when ` build ' is re-run, it will not re-build things that are already compiled. For detailed information on building KRoC:

bash$ ./build --help

Note: if the installation completes successfully, the ` build ' script will display a message -- read this carefully as it contains important information relating to the package. You should also read the top-level ` README ' file.

The various example programs can be built with:

bash$ ./build examples

Example programs are now installed under the 'kroc specific files' directory (as given in the configuration). Currently these are:

Directory Description examples/course/ course library example programs, demos and some model answers to occam exercises examples/syncs/ synchronisation primitive examples examples/udc/ user-defined channel example programs examples/cif/ C-interface example programs examples/demos/ the `better-bar' demonstrator examples/bsc/ file/socket/process examples (for blocking sys-calls) examples/dynproc/ dynamically loadable process examples examples/sdlraster/ SDLRaster example programs

The source-tree can be cleaned by running ` ./build clean '. This will not remove anything already installed, but will remove any example programs and cgtests built (that are built using ` ./build examples ' and ` ./build cgtests ' respectively).

Much of the KRoC documentation is provided in the form of text/HTML files and UNIX manual pages. In KRoC 1.3.3 and above, the standard "course" library is documented by manpages, in addition to minimal manpages for the Inmos libraries (that just detail the PROC/FUNCTION interfaces and give a brief description of the library). Documentation relating to KRoC is installed in the specified 'kroc specific files' directory under doc/ .

If you're new to KRoC, you should read the Getting started with KRoC page (a textual version is included in the distribution as essentially-kroc.txt ). This describes the basics of occam-pi programs and how to compile them with KRoC.

The following documentation is on-line (and also included in the distribution):

If you have problems compiling or installing KRoC on your Linux system, we may be able to help. When the ` build ' script is run, it leaves a copy of its output in a file called ` typescript ' (left in the top-level directory of the distribution). If the compilation fails, this file will have a copy of the error-message. E-mail this file as an attachment to ofa-bugs@kent.ac.uk. Please also include in the email any relevant information, e.g.: hardware/processor (` cat /proc/cpuinfo '); the Linux kernel version (` cat /proc/version ', or ` uname -a ); and the name and version of the distribution you are using (e.g. ``Debian stable'').

It is often helpful to have a full typescript file. To get this, `distclean' then re-build the distribution:

bash$ ./build distclean bash$ ./build KRoC installation configuration 1-7 to change path, A-E to toggle/set feature, Ctrl-C to abort, return to confirm and install:

There is a mailing-list for the dicussion of occam/KRoC related issues, occam-com@kent.ac.uk . This is a closed list, to subscribe please mail Peter Welch.

The KRoC open-source release is under continuous development. The following additions/extensions are planned for future releases, and may already be partially supported in the development releases:

MOBILE process types, as described in the IEE paper `Prioritised Dynamic Communicating and Mobile Processes', below

process types, as described in the IEE paper `Prioritised Dynamic Communicating and Mobile Processes', below KRoC target for Linux/MIPS (32-bit for MIPS-II and above)

KRoC target for Solaris/Sparc (gcc, 32-bit)

KRoC target for Linux/PPC (gcc, 32-bit)

All publications relating to the KRoC project can be found on this page: http://www.cs.kent.ac.uk/research/groups/sys/kroc.html.