Junior (Jr, J for Java and r for reactive) is a kernel for reactive programming in Java. It is closely related to SugarCubes and can be seen as kernel of it. Junior is developped jointly by EMP-CMA, Inria, and France Telecom / R&D. Junior is available for programming through an API called Jr. Junior has a formal semantics and several implementations.
A first implementation, called REWRITE, is the direct implementation of the semantics. It is thus the reference implementation. In REWRITE, the program syntax tree is analysed and rebuilt at each activation.
A second implementation, called REPLACE, avoids program rebuildings and is thus much more efficient than REWRITE. The technics used by REPLACE is actually very close to the one of SugarCubes.
REWRITE and REPLACE implementations are available from the download page.
A third implementation, called SIMPLE, avoids the traversal of the whole program at each activation. Instructions waiting for an event are posted in a file associated to the event. Thus, posted instruction are no more processed until the firing event becomes generated. This leads to the possibility of using huge numbers of events while preserving good response time. To get more information on SIMPLE, please contact Laurent Hazard from France Telecom R&D.
Junior has a formal semantics, expressed with rewriting rules (in the format of strutural operational semantics). This semantics is rather simple and is the reference semantics for Junior (pdf file, 128K).
Automata (finite states machines) can be produced (not always) from Junior programs. A research report describes this process (ps.gz file, 153kb). Implementation of automata production is available as a jar file (96K).
Junior is presently used in several contexts: implementation of Rhum, a language for reactive programming developped at France Telecom R&D; implementation of icobj programming and of the REJO/ROS reactive agents system developped at CMA/Inria. Junior has also been used in the Ping IST Project.