MIME-Version: 1.0 Server: CERN/3.0 Date: Monday, 06-Jan-97 21:38:05 GMT Content-Type: text/html Content-Length: 2881 Last-Modified: Monday, 11-Mar-96 06:47:52 GMT Esterel and its Compiler

The Esterel language

Esterel is a synchronous programming language for reactive systems. Esterel has a precisely defined mathematical semantics intended for programming the class of deterministic reactive systems that wait for a set of possibly simultaneous inputs, react to the inputs by computing and producing outputs, and then quiesce, waiting for new inputs. Esterel is based on the ``synchrony hypothesis,'' which stipulates that every reaction to a set of inputs is considered to be instantaneous. The programming model in Esterel is the specification of components, or modules, that run in parallel. Modules communicate with each other and the outside world through signals, which are broadcast and may carry values of arbitrary types. Consistent with the synchrony hypothesis, the emission and reception of signals is considered to be instantaneous.

Esterel allows only deterministic behaviors to be specified: the inputs to every reaction (and the current values of variables) fully determine the outputs emitted in that reaction as well as the input-output behavior of the rest of the program. Along with the synchrony hypothesis, both communication and pre-emption preserve determinism. Furthermore, all internal communication is compiled away, and a single deterministic finite state machine is generated by the compiler. Thus, the parallelism in Esterel is a structuring tool for programming convenience, and does not incur any run-time overhead --- the compiler automatically performs the complex interleaving between parallel modules. Furthermore, since this implementation is a finite state machine, the maximum amount of time taken by any reaction can be accurately bounded if the execution times of the transitions are known.

The compilers

Esterel has efficient compiler implementations based on well-defined mathematical semantics. These are two implementations: