Hybrid systems modeling languages that mix discrete
and continuous time signals and systems are widely used to
develop Cyber-Physical systems where control software interacts
with physical devices. Compilers play a central role, statically
checking source models, generating intermediate representations
for testing and verification, and producing sequential code for
simulation and execution on target platforms.
This paper presents a novel approach to the design and implementation
of a hybrid systems language, built on synchronous
language principles and their proven compilation techniques.
The result is a hybrid systems modeling language in which synchronous
programming constructs can be mixed with Ordinary
Differential Equations (ODEs) and zero-crossing events, and a
runtime that delegates their approximation to an off-the-shelf
numerical solver.
We propose an ideal semantics based on non standard analysis,
which defines the execution of a hybrid model as an infinite
sequence of infinitesimally small time steps. It is used to specify
and prove correct three essential compilation steps: (1) a type
system that guarantees that a continuous-time signal is never used
where a discrete-time one is expected and conversely; (2) a type
system that ensures the absence of combinatorial loops; (3) the
generation of statically scheduled code for efficient execution.
Our approach has been evaluated in two implementations: the
academic language Zélus, which extends a language reminiscent
of Lustre with ODEs and zero-crossing events, and the industrial
prototype Scade Hybrid, a conservative extension of Scade 6.