ARTIST Survey of Programming Languages
Alan Burnss (Editor)
The production of real-time and embedded systems involves the use of many different tools and techniques. As these systems become more software centric, programming languages employed in the production of this software are now of crucial importance. Any language has the dual role of enabling expression whilst at the same time limiting the framework of concept and abstractions within which that expressive power may be applied. If a language does not support a particular notion then programmers cannot apply it and may even be totally unaware of its existence. For real-time programming languages there are many such concepts that are supported to a greater or lesser extent in a range of languages that purports to be appropriate for the embedded systems domain. For example: time, clocks, concurrency, deadlines, events and signals, exceptions, periodicity, scheduling and predictability are all important notions that programmers may wish to address and which should therefore be available to them via the implementation languages that they can employ.
This survey considers over twenty programming languages. The short reports available on each language aim to introduce the main features of the language, provide the links to further sources of information, and give an indication of the current developments within the language. Some languages are mature, used widely and are the subject of rigorous standardisation procedures. Others are research languages, with a small user population and an informal definition. All languages covered in the survey are implementation languages in that they are supported by tools (typically compilers) which generate executable code for the designated hardware platform. To give a structure to the survey each language is placed in one of five classes: imperative, functional, synchronous, model-based, and platform-based. However this is a loose classification as some languages could easily be placed in more than one category, and imperative languages can usually be constrained to mimic the other styles.
A final point to note about this survey is that it is inevitably incomplete and it is a dynamic document. Extra contributions can easily be added (email the editor). Similarly, additional surveys of the languages that are covered can be included.
The C and C++ languages are still probable the most common language in use worldwide. Here we survey their link to POSIX and consider the systems programming extension SystemC. The use of Java (and Real-Time Java) is reviewed as is the new Ada 2005 standard. Finally in this section one of the older empirical languages is briefly covered: PEARL.
Three languages are covered in this section. Erlang was initially developed in the 1980s for soft real-time systems, Hume is more concerned with resource limited systems and Timber is specifically aimed at complex event-triggered systems.
There are a number of languages that base their semantic on the synchronous model of computation. Here the behaviour of the program is defined in terms of reactions to (external) activities. The time it takes to undertake computation is abstracted away, but the implementation must be fast enough so that the program keeps up with its environment. Hence reactive systems are well suited to capture many of the properties of real-time systems. A number of languages are addressed in this survey: Lustre, Esterel and Signal were all initially developed in the 1980; Reactive-C embeds the reactive paradigm in C; and Giotto is a more recent example of this class of language.
Although the idea of a programming language seems a well understood concept, there are inevitable disagreements about precisely what the difference is between a programming language and a modelling language. If the modelling language has a code generation capability that implies that there is no distinct programming stage then it is reasonable to include such model-based languages in this survey. In the future there may be many more such languages. Here we consider five. SBD used the synchronous model and attemptes to generate code directly from block diagrams. Simulink is a graphical modelling tool, also based on block diagrams, that is supported by a number of code generation tools. FXML can be regarded as a formal coordination language for managing dependencies and interactions between activities. Ptolemy II is a visual language that supports the creations of systems models that can then be refined using code generation techniques. Finally, MARTE which is a UML standard extension for real-time embedded systems is considered. It is clearly a modelling language, but it is envisaged that automatic software synthesis can be supported by MARTE.
All of the above languages start with the need to support the abstractions required by the application. Other languages start closer to the hardware and concentrate on abstracting its capabilities. Bossa is a programming language that allows the scheduling properties of the kernel to be controlled. Network Code attempts a similar role for communication scheduling. A slightly different approach is taken by BIP which focused on the incremental composition of system components.
No attempt is made in this review to compare languages or to rank them in any sense. This is left to the reader. Language wars are rarely productive. It is encouraging to note however that language design is still an active and creative endeavour. Implementation languages must bridge the gap between application abstractions and hardware platforms. Both are moving targets which means that language design remains a key intellectual challenge.
The following have made contributions to this survey. Alejandro Alonso, Pierre Boulet, Frédéric Boussinot, Christian Buckl, Alan Burns, Magnus Carlsson, Paul Caspi, Jorge Coelho, Víctor Fernández, Sebastian Fischmeister, Andy Gill, Thierry Gautier, Sébastien Gérard, Paul Le Guernic, Nicolas Halbwachs, Michael González Harbour, Leandro Soares Indrusiak, Julia L. Lawall, Per Lindgren, Pieter Mosterman, Gilles Muller, Johan Nordlander, Luís Miguel Pinho, Juan Antonio de la Puente, Bran Selic, Robert de Simone, Bjorn von Sydow, Jean-Pierre Talpin, François Terrier, Stavros Tripakis, Marisol Garcia Valls, Eugenio Villar, Andy Wellings, Reinhard Wilhelm and Sergio Yovine.