SystemJ introduces rich set of statements for description of asynchronous and synchronous concurrency, communication and synchronization of concurrent entities, and reactivity. It is also able to interact with other languages and programming systems to enable interoperability with the code written in those languages or with the legacy code. The language has certain number of kernel statements, which are sufficient for the full use of the language. Some additional statements are derived from kernel statements in order to enable faster expression of designer’s ideas and they are often referred to as syntactic sugar. The list of all kernel statements of SystemJ is given in Table below.
Table SystemJ kernel statements
Statement | Description and meaning |
pause |
Indicates consumption of one time tick |
[output][input] (type) signal S |
Signal S declaration |
emit S[(exp)] |
Emitting a signal S |
p1;p2 |
Sequential stetements |
while(true){p} |
Infinite loop; must consume at least one time tick |
present (S) {p1} else {p2} |
Conditional statement |
await (S) |
Waiting on presense of signal; consumes time |
[weak] abort ([immediate] S){p} |
Watchdog (preemption) |
trap (T){p1…exit(T);…p2} |
Software exception |
p1||p2 |
Synchronous parallel composition and II operator |
output (type) channel C |
Channel C output port declaration |
input (type) channel C |
Channel C inputport declaration |
p1> |
Asynchronous parallel composition and >< operator |
send C ([exp]) |
Sending on channel C |
receive C |
Receiving on channel C |
It is important to know some of the conventions used in this table. For example, S symbol is used to denote signal identifier, and C symbol for channel identifier. Letter p is used to denote single or a sequence of SystemJ statements. Finally, letter T is a symbol for the trap used in software exceptions. Curly brackets “{ “and ” }” are used to enclose a segment of code, denote the beginning and the end of segment, respectively, on which specific SystemJ statement applies, but are also used indicate beginning and end of reactions and clock domains. Square brackets “[“ and “]” are used to indicate optional features in the statements. Simplest form of the statements is if there are no optional features. For example signal declaration statement can be used to declare input, output or internal (local) signals. Input and output signals are used for communication between reactions and external environment, while local signals are used within a clock domain for broadcasting information to the reactions. Obviously, further they can be used for synchronization between reactions. The meaning of individual statements is here described rather intuitively with slightly more explanations where the statements are used in a concrete SystemJ program. The full meaning of the statements and the actual SystemJ semantics are described and can be found in other documents given in the literature section at the end.