Critique de livre : le langage ADA

Posté par  (site web personnel, Mastodon) . Modéré par Fabien Penso.
0
3
déc.
2002
Livre
La concurrence est un des points forts du langage Ada. La lecture de l'Ada Reference Manual (ARM) permet difficilement de se faire une idée de la mise en oeuvre de cet aspect du langage. Cet ouvrage écrit par deux figures de la programmation concurrente et praticiens de ce langage devrait vous aider à faire vos premiers pas.
Concurrency in Ada.
Auteur Alan Burns et Andy Wellings
Editeur Cambridge University press
ISBN 1-57870-190-2
Pages 390
Prix Prix Constaté 47.47 Euros
Rédacteur trollhunter
Couverture

Le premier chapitre est une présentation rapide des principaux aspects du langage. Bien que l'un des prérequis pour la lecture de cet ouvrage soit une familiarité avec un langage de type Pascal, il est tout de même préférable d'avoir programmé en Ada avant de se lancer dans l'étude de ce chapitre.
Les exemples sont bien choisis et on sent à leur lecture que les auteurs ont une grande pratique de ce language: le code est très clair, limpide aurait-on envie de dire.

Le chapitre suivant aborde la notion de programmation concurrente au travers d'un exemple simple de contrôle de la température. Bien que simple en soi, l'exemple recèle de nombreuses difficultées et leur ébauche de solution en Ada95 est magistrale: les auteurs maîtrisent parfaitement leur sujet. Dès ce chapitre deux constantes de l'ouvrage apparaissent:

  • Les solutions proposées, contrairement à ce que l'on croise hélas trop souvent dans le monde académique, sont implémentables.
  • Une grande maîtrise de la présentation visuelle : c'est du même niveau que les ouvrages du regretté Stevens.

Le troisième chapitre est lui consacré à la communication interprocess. Les exemples sont classiques et leur résolution permet d'introduire des concepts Ada qui seront approfondis dans les chapitres ultérieurs tels les tâches, les sémaphores et la communication par objet partagé ainsi que le Rendezvous. Si on devait résumer l'esprit de ce chapitre en une phrase, ce serait "La pratique ce n'est pas trivial !"

Les tâches font partie intégrante du langage et une petite comparaison entre les normes Ada83 et Ada95 permet de se faire une idée du chemin parcouru en une dizaine d'années.
Ce quatrième chapitre permet donc de se familiariser avec les tâches que l'on retrouvera tout au long de l'ouvrage. Dès le premier exemple oû une station service, ses pompes et le personnel sont présentés sous forme de tâches, on ne peut rester insensible à la beauté de ce langage : des déclarations à l'implémentation, tout semble se mettre en place naturellememnt. Autre exemple, le crible d'Eratosthene implémenté sous forme de tâche.
Puisque dans la station service nous avions un tableau de tâches pour représenter les pompes nous allons cette fois ci nous familiariser avec les hiérarchies de tâches.

Les deux chapitres suivants traitent du Rendezvous, mécanisme de base de communication directe entre tâches. Au cours de ces deux chapitres les auteurs au cours d'exemples de complexité croissante mettent en oeuvre ce mécanisme et vous apprendrez progressivement à contrôler ce mécanisme. Chose rare et c'est important de le signaler, les auteurs vous montrent non seulement ce qu'il faut faire mais vous montrent aussi ce qu'il ne faut pas faire en vous en expliquant pourquoi. Ceci devrait vous permettre de gagner un temps précieux, si dans vos essais vous voyez un motif à éviter émerger, vous pourrez vous arrêter à temps.

Le septième chapitre vous apprend les ficelles de la communication par objet protégé. Les auteurs commencent par le type protégé le plus simple. Puis, au fil du chapitre la complexité s'accentue. Après le problème des lecteurs écrivains, on arrive aux pragmastrès pointus Volatile, Volatile_Components, Atomic, Atomic_Components avec à chaque fois des explications détaillées et les avertissements de rigueur. Il apparaît clair que les auteurs maitrisent le sujet et qu'ils ont beaucoup pratiqué.

Le chapitre suivant passe en revue la résolution des problèmes de synchronisation à l'aide de requeue. Une fois encore, les explications théoriques et la pratique sont équilibrées avec un exemple très complet de transport ferroviaire de voyageurs dans des stations sur un parcours circulaire: c'est pire que des lemmings.

Le neuvième chapitre permet au lecteur de souffler un peu et de mettre en pratique ses connaissances fraîchement acquises concernant les objets protégés puisque ceux ci seront les briques de base des sémaphores, des signaux persistants, du pulse, des tableaux, des buffers, du broadcast et enfin des barrières. Nul doute qu'à la fin de ce chapitre vous saurez choisir et implémenter efficacement vos interactions entre les tâches.

Tout n'est pas pour le mieux dans le meilleur des mondes et de nombreuses applications doivent s'exécuter dans des environnements changeants de manière imprévisible, voir en mode dégradé. Aussi, il faut savoir gérer les exceptions. Ce n'est nullement un problème en Ada puisque c'est aussi un des très nombreux points forts de ce langage. Dans ce chapitre sont aussi traités le transfert asynchrone de contrôle et l'utilisation judicieuse de abort. C'est à l'aide d'exemples du monde réel tels le changement de mode de fonctionnement ou la reprise sur erreur. Les concepts et les solutions mis en oeuvres sont relativement simples, c'est leur combinaison qui rend les choses complexes : les auteurs arrivent à surmonter cet écueuil et à expliquer les interactions entre les différentes parties de leur solution tout en restant très simple. C'est vraiment du grand art !

Une des nombreuses annexes du langage la "Systems Programming" est mise en oeuvre dans le onzième chapitre qui se propose de vous montrer les interactions entre les tâches et la programmation système. A la fin de ce chapitre vous aurez une bonne idée de la façon dont sont écrits les gestionnaires de périphériques en Ada.

Ada est aussi bien entendu un langage temps réel. Ce chapitre se propose de vous donner un petit aperçu de ses possibilitées et des interactions entre les annnexes "Systems Programming" et "Real-Time Systems". Vous saurez gérer les priorités dynamiquement avec l'écriture d'un petit ordonanceur. Le profil Ravenscar (Pour plus d'informations consultez la note en fin de cette critique) est survolé avec la liste de ses pragmas.

C'est un fait peu connu mais le premier langage objet standardisé est Ada. Après un rapide survol de l'Objet en Ada les auteurs réimplémentent les buffers et tableaux vus au chapitre 9 sous forme objet. Puis c'est l'interaction des tâches et du modèle objet qui est examinée.

Le quatorzième et avant dernier chapitre fait le point sur un domaine oû de nombreux problémes de concurrence se manifestent : les systèmes répartis. En effet, Ada avec l'annexe "Distributed Systems" gère aussi très bien la programmation distribuée. Encore faut-il savoir la mettre en oeuvre. C'est justement le but de ce chapitre oû une fois encore la théorie et la pratique s'équilibrent. Après un rapide rappel du répartit en Ada le crible d'Eratosthene fait un retour inattendu : c'est vraiment très beau. Puisque l'objet a été abordé dans le chapitre précédent ce chapitre se termine par les objets distribués.

Un dernier chapitre vient conclure cet ouvrage en résumant ce qui a été vu précédemment. Tout en fournissant une ouverture sur un avenir potentiel d'Ada.

Cet ouvrage réussit à présenter les différents problèmes de la programmation concurrente et leurs solutions possibles en Ada95 tout en préservant un juste équilibre entre théorie et pratique. Trop souvent les exemples trouvés dans les livres sont du type "hello world" et s'avèrent inadaptables au monde reel. C'est un eccueil que cet ouvrage a su éviter puisque les exemples sont bien choisis, assez simples sans être simplistes.
Le style des auteurs est clair, ils vont à l'essentiel et savent justifier leurs choix. Les concepts et les chapitres ne se suivent pas au hasard ; on sent que le livre suit un plan qui est m$ûrement réfléchit : c'est un ouvrage qui a demandé beaucoup de travail et ça se voit.
Autre point positif de cet ouvrage ; c'est un livre qui se lit aussi avec le clavier c'est à dire qu'au fil des pages on se retrouve tout naturellement en train de taper les exemples et de les modifier histoire de voir ce qui se passe : un vrai plaisir.

Au chapitre des regrets, les auteurs sont quelques peu optimistes lorsque dans les prérequis ils citent une connaissance d'un langage de la famille Pascal. En effet, contrairement à ce que sa syntaxe peut laisser penser, Ada n'est pas un autre Pascal. Car si l'on peut effectivement faire quelque chose ressemblant à du Pascal en Ada ; ce ne sera pas de l'Ada et ce n'est pas avec le premier chapitre que l'on pourra acquérir une pratique du langage suffisante pour pouvoir retirer le plein potentiel de cet ouvrage. Mais la liste des références fournies en fin de critique devrait vous permettre d'acquérir cette dernière.

Même si l'on ne connaissait pas Ada avant, au fur et à mesure des pages on en vient à se dire que c'est vraiment un très beau langage, très bien conçu et pour peu que l'on s'informe un minimum on se rend compte qu'il a vraiment fait ses preuves et ce depuis de nombreuses années.

Le prix de cet ouvrage est d'autant plus raisonable qu'il est concu pour durer. La seconde édition présentement passée en revue date de 1998 et est toujours d'actualité. En outre, alors que nombres d'ouvrages récents sont physiquement fragiles et trop grands ou trop petits, ce livre est solide et possède juste les bonnes dimensions pour être utilisé au bureau ou dans les transports.
En conclusion, si la programmation concurrente vous intéresse, c'est vraiment l'ouvrage à posséder.


Table des matières

  • 1 The Ada Language
  • 2 The Nature and uses of Concurrent Programming
  • 3 Inter-Process Communication
  • 4 Ada Task Types and Objects
  • 5 The Rendezvous
  • 6 The Select Statement and the Rendezvous
  • 7 Protected Objects and Data-Oriented Communication
  • 8 Avoidance Synchronisation and the Requeue Facility
  • 9 Using Protected Objects as Building Blocks
  • 10 Exceptions, Abort and Asynchronous Transfer of Control
  • 11 Tasking and Systems Programming
  • 12 Real-Time Programming
  • 13 Object-Oriented Programming and Tasking
  • 14 Distributed Systems
  • 15 Conclusion
  • References
  • Index

Références

  • # Re: Critique de livre : le langage ADA

    Posté par  . Évalué à 0.

    Article très sympa, peut-être à la rigueur manque-t-il le petit logo "publi-information" en petit caractère en bas à gauche, et un lien direct sur amazon pour acheter le livre en 1-click.

    Sinon au lien de proposer des bouquins propriétaires, peut-être eut-il été pertinent de mettre des liens vers des ouvrages gratuits ? Par exemple http://www.vaxxine.com/pegasoft/homes/book.html(...) ou http://www.adahome.com/Tutorials/(...) ?
  • # Re: Critique de livre : le langage ADA

    Posté par  . Évalué à 1.

    qui utilise ada en france et pourquoi ?
    • [^] # Re: Critique de livre : le langage ADA

      Posté par  . Évalué à 2.

      Pour les applications temp reel souvent.
    • [^] # Re: Critique de livre : le langage ADA

      Posté par  . Évalué à 3.

      c'est pas mal utilisé dans l'aéronautique pour les systèmes temps réel (systèmes embarqués dans l'avion, contrôle de trafic aérien)
    • [^] # Re: Critique de livre : le langage ADA

      Posté par  (site web personnel) . Évalué à 10.

      Grande question ... et pas mal de réponses : Ada est utilisé dans beaucoup d'endroits où les contraintes temps-réelles sont fortes. Cela va des systèmes embarqués à des serveurs. Pour ne citer que quelques entreprises : Dassault, Matra, EDF, Canal+, Thalès, et j'en passe.
      Les principales raisons ? La tasking très puissant, la fiabilité, la maintenabilité, ...

      Juste au passage, gnat a été intégré à gcc depuis la version 3.1, et qu'un très bon debugger graphique dans la lignée de DDD est disponible, à savoir GVD (Gnu Visual Debugger, http://libre.act-europe.fr/gvd/(...))

      PS : Ada est bien écrit dans tout l'article, sauf dans le titre : ce n'est pas un loueur de voiture, Ada est à l'origine un prénom (Ada Lovelace, 1815-1852)
      • [^] # Re: Critique de livre : le langage ADA

        Posté par  (site web personnel) . Évalué à 1.

        Hum, c'est aussi vu comme un programme pour riche car les runtimes Ada coutait super chère (sauf depuis Gnat) et était souvent buggué.

        Bref, tout le monde est en train de passé au C. Parce qu'il y a plein d'outils, parce que tout les écoles en font,...

        Bref, gnat est vu comme arrivant trop tard.

        "La première sécurité est la liberté"

        • [^] # Re: Critique de livre : le langage ADA

          Posté par  (site web personnel) . Évalué à 2.

          tout le monde est en train de passé au C

          Pardon ???
          Heu... non. C++ est une autre des références, java progresse aussi. Mais pour les taches vraiments pointues et nécessitant une certaine robustesse (aéronautique...), Ada reste un grand classique.
          Ada apporte pas mal de trucs de base (tasks...), la notion de composants est au coeur du langage, les exceptions et le compilateur sont super fichus, la bibliothèque de base est largement fournie, etc.
          Honnêtement, pour un projet de grande taille ou la robustesse serait un point important, je choisirais sans hésiter Ada, et surtout pas C++... et encore moins C !
          Pour de l'embarqué, ça dépends de l'utilisation, mais bon en général on attends là aussi une certaine fiabilité, ça se rejoint...
          • [^] # Re: Critique de livre : le langage ADA

            Posté par  . Évalué à 2.

            Pour l'embarqué sous C++, voir ACE (Adaptive Communication Environment), bibliothèque haut-niveau (frameworks etc.), portable, performante.

            http://www.cs.wustl.edu/~schmidt/ACE.html(...)

            Semblerait que ce soit pas mal utilisé dans l'industrie. Y a aussi un ORB Corba (TAO).
          • [^] # Re: Critique de livre : le langage ADA

            Posté par  (site web personnel) . Évalué à 1.

            bah désolé de ton contredire mais je bosse dans l'aéronautique.

            VxWorks par exemple qui est très utilisé, s'utilise très mal avec Ada (possibilité de debug natif réduit) mais très bien avec le C.

            J'ai discuté d'Ada avec de 2 architects de programme info d'EADS dans 2 branches différentes. Et il en ressortait la même chose sur Ada : chère, peu fiable (différence de compilation entre cible ! genre un signed qui devient un unsigned), et il envisageait de laisser tomber pour le C en gros.

            "La première sécurité est la liberté"

          • [^] # Re: Critique de livre : le langage ADA

            Posté par  . Évalué à 1.

            pour un projet de grande taille ou la robustesse serait un point important, je choisirais sans hésiter Ada, et surtout pas C++... et encore moins C !

            J'ai eu une formation par un type qui avait une grande culture technique/informatique, et qui nous a rapporté qu'on faisait 50 (!) fois plus d'erreurs en C++ qu'en Ada. Des types ont dû se pencher sur la question et faire des évaluations.

            Ca ne m'étonne qu'à moitié car l'Ada force la rigueur, le compilateur vérifie beaucoup de choses, le "run-time" peut intégrer des vérifications de limites (tableaux, etc), et on peut préciser beaucoup de choses, genre un type qui va de 0 à 9 et puis de 100 à 999. On peut itérer sur un énuméré. Un de mes collègues en a fait sérieusement et il regrette certaines fonctionnalités. J'en ai fait il y a 10 ans mais pas énormément.

            Il a aussi ajouté que le C était relativement bien fait dans son genre, et avait une certaine cohérence. C'est le C++ qui avait la plus mauvaise réputation.
        • [^] # Re: Critique de livre : le langage ADA

          Posté par  . Évalué à 2.

          Non pas du tout, efface. Des compilateurs Ada libres existent depuis la création du langage : Ada/Ed est le premier compilateur certifié pour Ada83 (en fait, c'est un interpréteur), Gnat (Ada95) existe depuis 1995. Le seul problème a été que pendant de nombreuses années, le code Ada a été très mal optimisé, d'où sa difficile persée.
          Quant au C, tout le monde n'est pas en train d'y passer, car tout le monde en fait déjà. Non, tout le monde est en train de passer au C++/Java/Python/Perl/C#... euh non, pas C# en fait :-)

          L'Ada a toutefois trouvé des niches importantes comme le fait remarquer Dsls : la défense, le transport (aéronautique, spatial, ferroviaire, ...), le médical, ainsi que d'autres domaines plus spécifiques encore (Canal+ Technologies pour ses serveurs de télévision numérique, des projets libres comme GVD, adaCoinCoin !!!)

          Bref, gnat n'est pas arrivé trop tard, mais l'Ada (comme tout langage) n'est pas destiné à tout faire (même si on peut), et donc persiste dans des domaines où il est utile.
          • [^] # Re: Critique de livre : le langage ADA

            Posté par  (site web personnel) . Évalué à 1.

            Est-ce que une entreprise comme EADS est une entreprise assez grosse comme exemple ?

            Je tiens ce que je dis de chef de projet info de là-bas. Je crois qu'en aéronautique, ils s'y connaissent un peu...

            "La première sécurité est la liberté"

          • [^] # Re: Critique de livre : le langage ADA

            Posté par  . Évalué à 1.

            euh si, justement, a la base Ada a été crée pour tout faire...au sein du département de la défense des USA en tout cas, mais autant pour des applis embarquées que pour de la gestion.
            Juste une petite remarque sans grands interet si ca n'est que (cocorico) Ada est un langage (une norme ?) française.
      • [^] # Re: Critique de livre : le langage ADA

        Posté par  . Évalué à 1.

        C'est aussi beaucoup utilisé dans tout ce qui a des contrainte de sécurité. On retrouve dans ces cas la les entreprises que tu as cité.
        Mais il ne faut pas aussi oublié que l'Ada est aussi une norme.
      • [^] # Re: Critique de livre : le langage ADA

        Posté par  . Évalué à 1.

        Juste au passage, gnat a été intégré à gcc depuis la version 3.1>
        Est-ce que cela signifie qu'ayant gcc 3.2 je n'ai rien de particulier a faire pour utiliser Ada ?
        • [^] # Re: Critique de livre : le langage ADA

          Posté par  (site web personnel) . Évalué à 1.

          Est-ce que cela signifie qu'ayant gcc 3.2 je n'ai rien de particulier a faire pour utiliser Ada ?

          A priori oui. Rien de mieux qu'un "hello world" pour le tester :

          ~$ cat > hello.adb
          with Ada.Text_IO;
          procedure Hello_World is
          begin
          Ada.Text_IO.Put_Line ("Hello, world");
          end Hello_World;
          ^D
          ~$ gcc -o hello hello.adb
        • [^] # Re: Critique de livre : le langage ADA

          Posté par  . Évalué à 2.

          ben si tu as installé le frontend et la libgnat, oui.
          • [^] # Re: Critique de livre : le langage ADA

            Posté par  . Évalué à 1.

            et ca s'installe comment cette chose ?
            parce que les sources de gnat (meme la 3.15) demande un gcc 2.81
            kan a libgnat j'en ai trouvé des rpm mais pas de paquet de sources...et je n'ai pas rpm sur mon systeme (gentoo) en tout cas pas envie de l'installer.
    • [^] # Re: Critique de livre : le langage ADA

      Posté par  (site web personnel) . Évalué à 2.

      Pas mal aussi pour l'enseignement. Je me souviens de mes TPs de Deug 2ème année, mais aussi des cours d'architecures logicielles uniquement basés sur ce langage.

      C'est vrai que le langage est bien foutu pour commencer, assez élégant dans sa démarche mais certaines abstractions rebuttent le plus souvent les adorateurs du cooding pur.

      Spécial dédicace à mon projet de compresseur / décompresseur en première année de licence, le LZW entièrement en ADA ;-)
      • [^] # Re: Critique de livre : le langage ADA

        Posté par  (site web personnel) . Évalué à 2.

        Je me souviens que les cours de première année en DUT étaient entièrement basés sur Ada. Et pour apprendre la programmation, c'est un langage idéal, rigoureux (quelle plaie pour compiler :) et qui pousse je pense à de bonnes pratiques.
        Comme en plus il est suffisamment riche pour montrer les algos classiques de façon simple (prog parallèle, etc.) ... Franchement un bon langage. Même si pénible à écrire ;) et qu'il vaut mieux avoir des profs qui expliquent clairement le truc ;)
    • [^] # Oui, pourquoi ?

      Posté par  (site web personnel) . Évalué à 1.

      Il y a aussi des mega projet de soft de banque. Un chef de projet me disait que C++ devient vite un gros problème sur les gros projet (Java ne devait pas encore exister au démarage de son projet).

      Ada est plus propre et sa compilation donne des binaires au moins aussi rapide que le C si ce n'est plus.

      Bref, il n'a pas eu son heure de gloire en dehors de l'embarqué et c'est bien dommage (problème de librairie ?)

      "La première sécurité est la liberté"

      • [^] # Re: Oui, pourquoi ?

        Posté par  . Évalué à 2.

        et Ada a un certain avantage sur Java, car les spécifications d'Ada sont totalement disponibles.
    • [^] # Re: Critique de livre : le langage ADA

      Posté par  . Évalué à 2.

      il est enseigné a la fac enfin dans la mienne
      il faisiat partie de la trilogie oberon,ada,caml
    • [^] # Re: Critique de livre : le langage ADA

      Posté par  . Évalué à 0.

      il est enseigné a la fac enfin dans la mienne
      il faisait partie de la trilogie oberon,ada,caml
  • # Re: Critique de livre : le langage ADA

    Posté par  (Mastodon) . Évalué à 1.

    C'est pas pour jouer les rabat-joie, mais une fois de plus, il y a un scrouitch dans la traduction : Concurrent ne se traduit pas par concurrent, mais plutôt, au choix, par concourant, concomitant ou simultané.
    En aucun cas les processus ne cherchent à se concurrencer, mais juste à s'exécuter simultanément et proprement ...
    • [^] # Re: Critique de livre : le langage ADA

      Posté par  . Évalué à 1.

      on parle pourtant de gestion des acces concurrent...
    • [^] # Re: Critique de livre : le langage ADA

      Posté par  (site web personnel) . Évalué à 2.

      Si les processus agissent a priori de concert pour mener à bien une tâche, ils entrent en concurrence pour utiliser les ressources du système.

      Un processus peut occuper toutes les ressources d'un type donné sur le système, temporairement, ou de manière permanente : mémoire, temps d'exécution, nombre de fichiers ouverts (handle), appel système (par exemple DOS n'est pas réentrant, pour demander au système d'écrire dans un fichier, il faut attendre qu'il ait terminé toutes les opérations d'écriture en cours, sinon c'est l'UB), opération non atomique sur une valeur partagée, etc ...

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.