• [^] # Re: Goto

    Posté par . En réponse au journal Bac et calculatrices programmables : la fin ?. Évalué à 5.

    Ça a déjà été dit par d'autres, et mieux que moi, mais le contexte du papier de Dijkstra, A Case Against the Go To statement, et que la plupart nomment "Go To Considered Harmful"1 , n'est absolument pas contre l'utilisation du goto. Dans ce papier, Dijkstra est contre la programmation non-structurée, à une époque où les procédures et fonctions n'étaient pas toujours disponibles dans un langage de programmation, et où les structures de contrôle étaient parfois au mieux if/else.

    Je recommande fortement la lecture (ou l'écoute) de ce monsieur, qui rappelle qu'après le papier de Dijkstra, Donald Knuth a écrit Structured Programming With go to Statements. Notamment, Knuth rapporte une conversation (informelle) avec Dijkstra à propos du goto:

    I am not in fact disagreeing sharply with Dijkstra's ideas, since he recently wrote the following: "Please don't fall into the trap of believing that I am terribly dogmatical about [the go to statement]. I have the uncomfortable feeling that others are making a religion out of it, as if the conceptual problems of programming could be solved by a single trick, by a simple form of coding discipline!" 2

    Si on traduit rapidement :

    En réalité, je ne suis pas en désaccord avec les idées de Dijkstra, puisqu'il a récemment écrit ce qui suit : « S'il vous plaît, ne tombez pas dans le piège de croire que je suis extrêmement dogmatique à propos du goto. J'ai la désagréable impression que d'autres sont en train d'en faire une religion, comme si les problèmes conceptuels de programmation pouvaient être résolus par un simple artifice, sous la forme d'une simple discipline de codage ! »

    Le même article de blog référence une question (forcément un peu orientée) à propos de l'utilisation du goto dans un module pour PHP :

    May I ask if there is a reason why you prefer using goto instead of function recursion?

    ... qu'on pourrait traduire par

    Puis-je demander s'il y a une raison pour laquelle vous préférez utiliser goto au lieu d'un appel récursif ?

    L'auteur du code explique, benchmarks à l'appui, pourquoi dans ce cas précis, l'utilisation du goto est la meilleure solution, tout en conservant une lisibilité satisfaisante du code et en maximisant la performance en termes de bytecode généré et de temps d'exécution. Malgré tout, des gens lui ressortent le papier de Dijkstra sans avoir sans doute compris que la décision n'était pas prise sur un coup de tête, mais au contraire mûrement réfléchie après avoir analysé les autres solutions.

    Bref. Lisez cet article, il est bon, il est intéressant, et il pointe vers tout plein de liens rigolos.


    1. à cause de l'éditeur des « Communications of the ACM » qui avait reformulé le titre et soumis le papier au « courrier des lecteurs » pour que le papier court-circuite le processus de revue et soit publié plus vite.

    2. Communication personnelle avec Knuth.