3.2 Values
This section describes the kinds of values that are manipulated by
join-calculus programs.
Integer numbers
Integer values are integer numbers from -230 to 230-1, that
is -1073741824 to 1073741823. The implementation may support a
wider range of integer values: on 64-bit platforms, the current
implementation supports integers ranging from -262 to 262-1.
Character strings
String values are finite sequences of characters. The current
implementation supports strings containing up to 224 - 6
characters (16777210 characters).
Booleans
Booleans values are denoted by true and false.
Port names
Port names are the main value of the join-calculus. They can be seen
as channels that carry arguments. There are two kinds of port names:
asynchronous ones and synchronous ones. Sending messages on an
asynchronous port name is the basic instruction of the language. The
invocation of a synchronous name is more like a function call: it
gives back results and can occur inside expressions.
Locations
Locations provide support for distributed programming in the
join-calculus. A location is a complete runtime unit, with both
locally defined port names and definitions and locally running
processes. Location may be created, die or migrate.
External values
External values are lifted from the Objective Caml language. External
values are abstract values at the join-calculus level, thus no special
syntax is provided for them. The standard join-calculus distribution
provides floating-point numbers and characters as base external
values. Objective Caml data structures such as arrays or lists are
also available in the libraries. Other externals values can be defined
by the programmer.
NB: In contrast with the other kinds of values, the join-calculus only
provides partial distributed support for external values as they move
from on runtime to another.
-
Basic values (floating-point numbers, chars) and structured
values (lists, trees,...) can be used provided they do not contain
port names.
- Mutable values can be used (arrays), but remote value-passing
does not preserve sharing of their state.
- Non-portable values such as Ocaml functions, Ocaml objects or system file
descriptors cannot be sent remotely; this causes a runtime error.