Ada 95: the language of choice for real-time concurrent programming

You may dismiss all the following, arguing that it is yet another sterile aspect of the language war, that no language is superior to others, etc. I know. No language can miraculously cure a flawed design. The problem is that several object-oriented languages allow one to compile and run wrong designs. By wrong I do not mean buggy, but a program whose "solution space" does not map directly to the "problem space". This is more easily said than done. This calls for a software engineering methodology, together with a language with a strong expressive power.

Programming without methodology is like building a house without a plan. You may succeed in building small shelters; this gives you a feeling of confidence. But you cannot extend your initial work to make a factory, or a town. Of course, building with rules helps you to produce a house which will not collapse. This doesn't prevent it to be awful, user-unfriendly, inefficient for its destination, or non-adaptable.

The language issue is not very important, unless the language itself first enforces software engineering principles. For "programming in the large", ease of programming is illusory; you cannot pilot easily a large aircraft: you have to learn, first. Lots of things. But many languages have unnecessary complexities (because they are founded on arbitrary elements), or oblige you to do contorted tricks (because they are too primitive). Those who think that C++ is adequate and "easier" to learn should look here, or if they think that it is specially good for object-oriented programming here.

Expressive power means an extensive use of abstraction. A language compiler is mainly a tool for translating abstract concepts to machine language (assembly). One cannot think in terms of low-level constructs: it is like having to play tennis by writing a command list for every muscle. And your creativity is a function of the richness of the palette of actions naturally permitted by the language.

Moreover, the whole language you use should not be cryptic (except for a few unavoidable implementation decisions; remember, you use a computer, not an abstract machine), and well documented. A programming language should not be, as it is so often the case, an assemblage of arbitrary recipes; each rule should have a justification. I many languages, when you encounter a strange construct, to the question why?, the answer of the language’s builder(s) seems to be: why not? Ada is different in this respect: just have a look at the Ada 83 and theAda 95Rationales.

Now, to program short-term ecological simulations, why should the language have concurrency built-in? Because in ecosystems interactions occur in parallel: preys feed while being eaten by predators, and animals do not respire one group after another. This is nevertheless the case in classical mathematical models programmed in FORTRAN… Moreover, time is rarely more than an order upon sequential actions (i.e. an index in a loop). On the contrary, a (monotonic) clock should arrange actions of different durations (see below: real-time simulations).

More on Ada: click here and here.

Return to home page

 

(Last modified 2002-11-19)