Re: "interruption" a l'interieur d'une boucle ?

Michel Gauthier <[email protected]>
Newsgroups gmane.comp.lang.ada.france
Message-ID <[email protected]>
> Thomas De Contes a écrit :
>
>> [...je coupe un débat trop long pour le reciter en entier...]
>>
>

J’avais, dans des temps que les moins de vingt ans ne peuvent pas 
connaître, publié dans TSI un essai de synthèse sur goto, et j’ai envie 
d’intervenir ici.

Ne pas utiliser goto est une règle pas historiquement contestée (avec 
de bons argument), pas immédiatement  acceptée, et appliquée sans la 
comprendre. En pratique, on s’aperçoit qu’on trouve toujours une 
solution sans goto de simplicité comparable. Et on constate que bien 
peu de programmeurs ont compris cette règle, même s’ils ne se 
hasarderaient pas à la violer.

Un peu d’histoire. Ceux que ça ennuie peuvent passer au spam suivant.

Au commencement était l’organigramme, autrement sit le plat de 
spaghetti. Et la lumière fut, avec les dénommés Böhm et Jacopini 
publiant en 1966 qu’on pouvait tout programmer avec si/alors/sinon, 
tantque et des variables booléennes. Alaluyah! Il en résulta la 
« programmation structurée », appliquée de manière intégriste en 
n’acceptant rien d’autre. Ce fut Pascal, merveille pédagogique et 
nullité industrielle (un peu la faute à ses concepteurs).

Je rappelle pour mémoire le débat entre Dijkstra et Knuth autour de 
goto, débat utile malheureusement gâché par des zélateurs incompétents 
(situation loin d’être unique). Vinrent les transformations de 
programmes, Arsac introduisant les sorties d’itération à plusieurs 
niveaux (numériquement) dont je montrai ultérieurement qu’il était 
préférable de les nommer.

Un article primoavrilesque introduisit aussi l’instruction come from, 
peut être pas si canularesque que ça au bout de la réflexion.

Dans un monde parallèle furent inventées les preuves de programmes, 
assertions, préconditions, postconditions et invariants de tous poil et 
plume, lesquels assuraient (mais on ne le savait pas encore) les 
fondements de bien des choses. La suite est une vision plus personnelle.

La difficulté des preuves n’est pas dans goto : on sait où on est, on 
sait où on va. La difficulté est dans le come from : on aurait surtout 
besoin de savoir d’où on vient quand on a plusieurs chemins d’arrivée. 
La solution proposée est la précondition et la postconditon des 
sous-programmes, et l’invariant de boucle, qui doivent être introduits 
a priori. Mais cette solution est universelle : l’instruction de retour 
de sous-programme est rendue solide par l’existence de la 
postcondiiton, celle de sortie de boucle par l’invariant d’itération. 
Rien n’interdit d’introduire un invariant, non pas de goto mais 
d’étiquette.

Parallèlement, si on introduit dans le débat les mesures de complexité 
de programme, on peut mesurer la complexité apportée par l'introduction 
d’une instruction par rapport à une situation sans elle. La complexité 
additionnelle d’un ensemble de goto vers l’avant est égale à la 
quantité de structures de contrôle dont il faut sortir.  La complexité 
d’un goto unique en arrière est (de mémoire) le double. La complexité 
d'un ensemble de goto dont certains en arrière n’est pas calculable de 
manière générale.

Ceci étant rappelé autour du saut lui-même, j’ai envie de dire que 
l'arrivée d’Ada n'a presque rien changé aux façons de programmer. Quand 
je regarde autour de moi, j'ai l'impression qu'en quarante ans ce qui 
s'est passé dans le monde des fondement de la programmation n'a eu 
aucune influence sur la réalité professionnelle que je constate. Par 
une autre voie, il semble que je rejoigne Dewar et Schonberg dans leur 
défense et illustration de l'enseignement de la programmation.

À trop ignorer l’histoire, on la condamne à se répéter.

Alors... introduire d’autres instructions ? Je n'y crois pas trop. Le 
plus important aurait été à mon avis de réfléchir avant de traduire 
dans les bibliothèque prédéfinies ce qui se faisait avant, au lieu de 
produire des concepts nouveaux conçus à partir d’une abstraction du 
monde et de ce qui devenait possible. Ça, on l’a presque totalement 
raté.

Excusez ces élucubrations d'ancien combattant.

Un proverbe pour finir : l'important dans un programme, ce ne sont pas 
les instructions qui en définissent le fonctionnement, ce sont les 
assertions qui articulent ces instructions.

-----     -----     -----     -----     -----
Michel Gauthier
83, rue d’Isle
87000 Limoges
-----     -----     -----     -----     -----

Il semble possible de faire des OMLTTS sans E.
On peut aussi faire des SUPES sans O.

_______________________________________________
Site WWW de l'association Ada-France: http://www.ada-france.org/
[email protected]
http://www.ada-france.org/mailman/listinfo/ada-france
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.