Lexique / goto

Douglas Edric Stanley

2006.06.18

source code: drawto

L’expression GOTO est à jamais brulé sur la rétine de toute une génération de programmeurs. GOTO est la commande qui ordonne un programme de sauter à une autre position dans le programme, soit pour instantier une boucle du programme en revennant sur une position précédente, soit pour bifurquer à une autre position dans le programme, par exemple en réponse à une donnée intérieure ou extérieure au programme.

Plus clairement : l’expression GOTO déplace l’activité de l’ordinateur spatialement à un autre endroit, et lui ordonne de faire ce qui y est écrit.

Pour beaucoup, l’apprentissage du langage BASIC commençait par l’écriture des lignes suivantes :

10 PRINT "HELLO WORLD!"
20 GOTO 10
BASIC 'Hello World' program

Ce programme affiche ad infinitam les mots “Hello World!” sur l’écran de l’ordinateur, jusqu’à son extinction (cf. 10 PRINT MAEDA).

Une version plus extrême de cette logique peut être exprimé le code suivant :

10 GOTO 10

Ici le programme boucle sur lui-même, sans qu’une quelconque instruction soit affiché à l’écran. Le programme donne alors l’impression d’être bloqué, car il ne fait rien d’autre que de revenir à l’infini au même instruction, à savoir à l’instruction qui demande de revenir à lui-même. L’impression d’un arrêt vient du fait qu’il n’y a pas d’information affiché à l’écran pendant tout ce procédé éternel, rien pour nous indiquer que quelque chose se passe : nous ne voyons rien, alors qu’en réalité l’ordinateur est extrêmement occupé. Il met en acte le programme qui lui ordonne d’executer la même instruction encore et encore : de revenir encore et encore à lui-même. Ce retour à lui-même est un des actes les plus fondamentaux des premières techniques de programmation, car en glissant quelques instructions supplémentaires à l’intérieur de ce bouclage compact, nous pouvons donner l’impression d’un ordinateur active, qui évolue, voire d’un ordinateur extrêmement réactif. C’est d’ailleurs la plupart du temps la façon dont on construit un jeu video.

Bien sûr, GOTO peut aussi être utilisé pour moduler l’activité d’un ordinateur. C’est sa fonction prémière. Pour un usage bifurcant du GOTO, on a besoin de l’expression if…then…else :

10 IF ENEMY > HERO THEN GOTO 20 ELSE GOTO 30
20 PRINT "YOU LOST!"
25 GOTO 20
30 PRINT "YOU WON!"
35 GOTO 30

Malgré quelques réapparitions via des environements populaires comme Flash ou Director, à l’époque de la programmation orienté-objet, GOTO a plus ou moins été bani comme une forme de programmation maladroite. Il n’est pas étonnant de voir GOTO disparaître petit-à-petit, car nous nous abstrayons de plus en plus du fonctionnement de la machine. Le GOTO fonctionne toujours aux couches les plus fondamentales de la machine — aller à l’emplacement x et éxecuter les instructions de cet emplacement. Cette idée d’une suite d’instructions placés à des endroits spécifiques (un point x), et si fondamental à notre conception d’un ordinateur, qu’il est difficile de l’imaginer disparaître, même si nous nous mettons de plus en plus d’abstractions entre nous-mêmes et ces procédés fondamentaux.

GOTO est également un composant significatif de la Turing Machine et du langage parmis les plus difficiles de la machine : le langage assembleur. Au fait, la Turing Machine est pratiquement défini par cette capacité de se déplacer à gauche ou à droite sur l’éternel ruban, en fonction des valeurs inscrits sur le ruban. Ce déplacement est par essence la même chose que le GOTO.

Enfin, le GOTO introduit également dans la programmation l’idée d’une contingence absolue, où chaque ligne de code puis amener à n’importe quel autre ligne de code, à tout moment et sans hierarchie. Ceci ne veut pas dire que tout est pareil, ou que chaque évenement et semblable aux autres, mais il suggère néanmoins que des relations jusqu’ici inattendus sont désormais possibles. Cette contingence est lié étroitement à la nature spatiale du GOTO : vous êtes actuellement ici, aller maintenant ici. GOTO suggère que la programmation informatique peut être compris comme une activité spatialement autant que conceptuelle, c’est-à-dire qu’il peut être compris comme un agent dans un plot.

Beaucoup des premiers jeux video — programmés en BASIC — ont profité de cette logique, permettant à des utilisateurs d’explorer le code du programme de façon linéaire — créant ainsi une narration — tout en sautant partout dans le code spatialement. En lisant des lignes numéro 1 à 100 du programme, par exemple, l’ordinateur afficher des phrase de type, “Vous êtes dans des sous-bois”, “Des arbes vous bloquent l’accès”, ou “Un chemin mène vers le nord”. En répondant aux bonnes questions, le joueur pouvait pousser l’ordinateur à lire désormais entre les lignes 100 à 200 du programme, donnant ainsi des phrases comme, “Vous êtes devant un château”, “Il y a une douve qui entoure le château”, et “Des aligators nagent à l’intérieur de la douve”.

Ces premiers jeux d’aventure ont saisit la génie du GOTO, en exploitant sa capacité de traverser linéarement une liste d’instructions de façon non-linéaire. Du coup, une nouvelle forme de linéarité été construit : la narration du jeu d’aventure tout-à-fait linéaire, c’est-à-dire régit par une logique d’itération où chaque évenement successif du joueur construit une narration actualisé en acte par un joueur chaque fois qu’il progesse au prochain évenement. C’est-à-dire que le joueur voit une progression linéaire de ces mouvements (aller au nord, ramasser la paille, ouvrir la cannette, utiliser la paille pour boire, rapetisser, entrer dans le trou), à l’intérieur d’une lecture non-linéaire du code informatique. Dans ce sense, GOTO re-linéarise la nature discret, spatialialement non-hierarchique de l’ordinateur, à travers une sorte de zigzag.

Un dernier point. Si le GOTO donne une nouvelle forme à la linéarité, il le fait uniquement à travers un procédé de déplacements succéssives, c’est-à-dire sans arrêt. Le GOTO ne fonctionne que s’il continue à faire GOTO, l’un après l’autre, donnant naissance à un talon d’achille dans le fonctionnement de la machine. Un jeu d’aventure comme Open Sound Control. est intéressant uniquement tant qu’on a encore des niveaux à conquérir : une fois la princesse retrouvé, le jeu perd toute sa force narrative. Ce principe va l’encontre du dispositif cinématographique, qui a tendance à conduire sa narration directemment vers l’endroit de son extinction. Contrairement à la pellicule cinématographique fini, le GOTO n’a pas d’autre arrêt que le boucle trop petit (le blocage ou l’extinction de la machine). Il peut se déplacer à l’infini à l’intérieur de l’espace de la machine, même si celui-ci est lui aussi fini. Contrairement à la pellicule, l’extinction ne fait pas parti structurellement du GOTO : elle est uniquement une condition de sa disparition pure et simple.

Il n’est pas alors étonnant de voir l’apparition de projets comme Red vs. Blue, ou une multitude de réappropriations artistiques telles que How To Win Super Mario Bros, Prepared PlayStation ou Super Mario Clouds, ainsi qu’une pléthore d’exploits du jeu où jouer le jeu devient une performance expressive — souvent en transformant les erreurs et defauts du jeu contre lui-même, ou en essayant de jouer le jeu le plus vite possible même s’il faut tricher. L’ensemble de ces activités détourne l’idée de la narration du jeu comme une totalité ménant vers une conclusion. Elles ramènent le jeu à une forme cyclique (cf. boucle), plus alignée avec la nature infinie du GOTO.