Section: Scientific Foundations
Reactive and Functional programming
Reactive programming deals with systems of concurrent processes sharing a notion of time, or more precisely a notion of instant. At a given instant, the components of a reactive system have a consistent view of the events that have been, or have not been emitted at this instant. Reactive programming, which evolves from synchronous programming à la Esterel , provides means to react – for instance by launching or aborting some computation – to the presence or absence of events. This style of programming has a mathematical semantics, which provides a guide-line for the implementation, and allows one to clearly understand and reason about programs.
We have developed several implementations of reactive programming, integrating it into various programming languages. The first instance of these implementations was Reactive-C, which was the basis for several developments (networks of reactive processes, reactive objects), described in the book  . Then we developed the SugarCubes , which allow one to program with a reactive style in Java , see  . Reactive programming offers an alternative to standard thread programming, as (partly) offered by Java , for instance. Classical thread programming suffers from many drawbacks, which are largely due to a complicated semantics, which is most often implementation-dependent. We have designed, following the reactive approach, an alternative style for thread programming, called FairThreads , which relies on a cooperative semantics. Again, FairThreads has been integrated in various languages, and most notably into Scheme via the Bigloo compiler that we develop. One of our major objectives is to integrate the reactive programming style in functional languages, and more specifically Scheme , and to further extend the resulting language to support migration primitives. This is a natural choice, since functional languages have a mathematical semantics, which is well suited to support formal technical developments (static analysis, type systems, formal reasoning).
We also designed a tool to graphically program in the reactive style, called Icobjs . Programming in this case means to graphically combine predefined behaviours, represented by icons and to implement reactive code. Potential applications are in simulation, human-machine interfaces and games.