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.