goto

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](spatialisation) à 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. Apple II).

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](boucle) compact, nous pouvons donner l’impression d’un ordinateur active, qui évolue, voire d’un ordinateur extrêmement §[réactif](reactive). 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](modulation) 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](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](abstraction) 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](abstraction) entre nous-mêmes et ces procédés fondamentaux.

§[GOTO] est également un composant significatif de la §[machine de Turing] et du langage parmis les plus difficiles de la machine : le langage assembleur. Au fait, la §[machine de Turing] 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](spatialisation) du §[GOTO] : vous êtes actuellement ici, aller maintenant ici. §[GOTO] suggère que la programmation informatique peut être compris comme une activité §[spatialement](spatialisation) 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](spatialisation). 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’§[iteration] 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](déplacer) 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 Super Mario Bros. 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].