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 |
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
- Le site du livre.
- Le département temps réel de l'universitée de York.
- GNAT et librairies pour GNU/Linux.
- GNAT et librairies pour MacOS.
- The bigonline book of Linux Ada Programming. : Tout ce que vous avez toujours voulu savoir (et même plus encore) sur la programmationde Linux en Ada.
- Ada 95: The Craft of Object-Oriented Programming : le livre en ligne.
- Ada France, association française très sympathique.
- Ada ReferenceManual (ARM)
- Ada95Rationale : les justifications des choix du langage.
- Quality and style guide : la norme de programmation Ada (peut être vérifiée par GNAT)
- OpenRavenscar
- Petit tutoriel enFrançais de Polytechnique Montreal
- Le cours de l'IUT d'AIX Marseille
- Liste de livres et detutoriaux sur le Web en anglais.
# Re: Critique de livre : le langage ADA
Posté par Harry Cover . Évalué à 0.
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 Nico . Évalué à 2.
-1
[^] # Re: Critique de livre : le langage ADA
Posté par Harry Cover . Évalué à 0.
[^] # Re: Critique de livre : le langage ADA
Posté par Nico . Évalué à 0.
-1 (pour moi )
[^] # Re: Critique de livre : le langage ADA
Posté par Pierre Tramo . Évalué à 4.
Et quel rapport avec la gratuité ?
[^] # Re: Critique de livre : le langage ADA
Posté par Harry Cover . Évalué à 1.
[^] # Re: Critique de livre : le langage ADA
Posté par Pierre Tramo . Évalué à 1.
Maintenant je vois pas le rapport avec le terme propriétaire sur un bouquin. Et encore moins le rapport avec la gratuité.
[^] # Re: Critique de livre : le langage ADA
Posté par gege . Évalué à 2.
FAITES ATTENTION LES GARS ! Libre n'est pas forcément gratuit, gratuit n'est pas forcément libre.
# Re: Critique de livre : le langage ADA
Posté par kesako . Évalué à 1.
[^] # Re: Critique de livre : le langage ADA
Posté par Hardy Damien . Évalué à 2.
[^] # Re: Critique de livre : le langage ADA
Posté par benoit orihuela . Évalué à 3.
[^] # Re: Critique de livre : le langage ADA
Posté par Bruno (site web personnel) . Évalué à 10.
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 Nicolas Boulay (site web personnel) . Évalué à 1.
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 Nicolas Roard (site web personnel) . Évalué à 2.
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 Moby-Dik . Évalué à 2.
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 Nicolas Roard (site web personnel) . Évalué à 1.
TAO permet entre autre de n'embarquer que ce qui est nécessaire je crois...
[^] # Re: Critique de livre : le langage ADA
Posté par Nicolas Boulay (site web personnel) . Évalué à 1.
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 Nicolas Boulay (site web personnel) . Évalué à 1.
"La première sécurité est la liberté"
[^] # Re: Critique de livre : le langage ADA
Posté par Olivier Jeannet . Évalué à 1.
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 gege . Évalué à 2.
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 Nicolas Boulay (site web personnel) . Évalué à 1.
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 Brice Carpentier . Évalué à 1.
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 Tutur . Évalué à 1.
Mais il ne faut pas aussi oublié que l'Ada est aussi une norme.
[^] # Re: Critique de livre : le langage ADA
Posté par Brice Carpentier . Évalué à 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 Bruno (site web personnel) . Évalué à 1.
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 Brice Carpentier . Évalué à 1.
[k@daKweb.no-ip.org k] gcc -o hello hello.adb
gcc: hello.adb: Ada compilateur n'est pas installé sur ce système
*sigh*
[^] # Re: Critique de livre : le langage ADA
Posté par gege . Évalué à 2.
[^] # Re: Critique de livre : le langage ADA
Posté par Brice Carpentier . Évalué à 1.
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 Julien CARTIGNY (site web personnel) . Évalué à 2.
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 Nicolas Roard (site web personnel) . Évalué à 2.
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 ;)
[^] # Re: Critique de livre : le langage ADA
Posté par Nicolas Roard (site web personnel) . Évalué à 1.
Un grand merci à lui ! :)
[^] # Re: Critique de livre : le langage ADA
Posté par Brice Carpentier . Évalué à 3.
Pis on refait un tp d'ada, et là on s'perçoit que c'est vraiment un excellent langage.
[^] # Oui, pourquoi ?
Posté par Nicolas Boulay (site web personnel) . Évalué à 1.
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 Brice Carpentier . Évalué à 2.
[^] # Re: Critique de livre : le langage ADA
Posté par modr12 . Évalué à 2.
il faisiat partie de la trilogie oberon,ada,caml
[^] # Re: Critique de livre : le langage ADA
Posté par modr12 . Évalué à 0.
il faisait partie de la trilogie oberon,ada,caml
# Re: Critique de livre : le langage ADA
Posté par Benoît Bailleux (Mastodon) . Évalué à 1.
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 Brice Carpentier . Évalué à 1.
[^] # Re: Critique de livre : le langage ADA
Posté par Michaël (site web personnel) . Évalué à 2.
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.