Le 9 juin a eu lieu une rencontre Meetup du groupe dédié à la fiction interactive basé à Londres/Oxford. Graham Nelson, le créateur d’Inform, y a présenté Inform, son passé ainsi que ses plan d’avenir. Tout cela était donc très excitant sachant qu’il n’avait pas donné de nouvelles depuis plusieurs années.

Pour les anglophones qui désirent lire la version complète en anglais (avec les images du PowerPoint), tout est là. Sinon, continuez en dessous pour un résumé de ce qui a été dit !

Les débuts d’Inform

Graham Nelson commence par une brève explication de ce qu’est Inform et un petit historique de la FI à parser depuis les années 1970. Ça le mène jusqu’au début des années 1990, époque durant laquelle les IF commerciales (comme Infocom) ne deviennent plus viables, tandis qu’en parallèle, de plus en plus de gens commencent à faire de l’informatique pour le plaisir et en particulier à rédiger leurs propres œuvres de fiction interactive.

Il crée la première mouture d’Inform en 1993, c’est un langage ressemblant au C, dont il compare l’ampleur à un projet d’étudiant. Du fait des retours de la communauté, il peux rapidement l’améliorer, les versions se succèdent jusqu’en 1996 et l’arrivée d’Inform 6.

En 2003, il décide de se remettre aux FI, de repartir de zéro et de créer un langage complètement différent. Avec l’aide d’Andrew Plotkin et d’Emily Short, il crée alors Inform 7, qui sera rendu public en 2006. Depuis, I7 a acquis une bonne base d’utilisateurs, qui lui rapportent beaucoup de bugs. Il doit donc gérer ses priorités, essayer de jongler entre la résolution des bugs plus ou moins grave et l’ajout de nouvelles fonctionnalités.

Les programmes sont des textes

Ensuite, Graham Nelson explique le choix qu’il a fait de fonder I7 sur le langage naturel.

Il parle de Donald Knuth, et se pose la question de savoir si un programme peut-être considéré comme un texte, si l’on peut le lire comme on lirait un livre. Si certains programmes ont été imprimés et vendus en librairie, et s’il est facile d’accéder au texte de programmes open source, le fait est qu’on ne les lit pas comme on lirait des textes. Cela serait dû au fait qu’ils contiennent énormément de manœuvres de bas-niveau qui rendent difficile la compréhension globale. Le fait que beaucoup de programmeurs évitent de commenter leur travail par peur de la redondance avec le code lui-même n’aide pas non plus.

Donald Knuth a théorisé le « literate programming », une méthode permettant de mêler le code et l’explication de son fonctionnement. Graham Nelson a décidé d’appliquer ce principe à Inform, notamment en s’assurant que la librairie standard soit lisible et compréhensible facilement par un être humain et l’a donc incluse sous forme d’exemples courts, reproductibles et commentés.

Mais Graham Nelson a décidé d’aller plus loin et de se baser sur l’anglais naturel afin de mêler définitivement le code et son commentaire. Il explique ensuite comment cette approche a influencé le fonctionnement même d’Inform. Il prend pour exemple les « kind » d’I7, qui se rapprochent du concept de classe en informatique, mais qui a été influencé par la façon dont les gens créent des catégories : on regroupe des individus possédant des caractéristiques semblables, puis on définit une catégorie à partir de ces caractéristiques. Cependant, il arrive que certains membres de cette catégorie ne comportent pas l’intégralité des caractéristiques qui la définissaient à l’origine. Il prend l’exemple des oiseaux : si l’une des caractéristiques qu’on attribue communément aux oiseaux est qu’ils volent, on considère quand même les autruches et les manchots comme des oiseaux, alors qu’ils ne sont pas capable de voler. I7 imite cette façon de fonctionner avec usually (« généralement »), qui permet d’assigner une caractéristique générale à un groupe, tout en laissant la possibilité d’avoir des exceptions.

Il continue avec les concepts de prédicats unaires et binaires. Le langage naturel repose énormément sur des prédicats binaires, tandis que la plupart des langages informatiques, en particulier ceux qui sont orientés objet, ont tendance à privilégier les prédicats unaires. Il utilise l’exemple « Sophie likes purple » (« Sophie aime le violet »), qui dans Inform crée un prédicat binaire, une relation entre une personne et une couleur. Pour simuler ce genre de comportement avec Java ou Python, il faudrait soit ajouter une liste par personne contenant les couleurs qu’elle aime, soit ajouter une liste par couleur contenant les personnes qui l’aiment. Dans les deux cas, il ne trouve pas ça très naturel de devoir subordonner la relation à un des participants ; c’est pourquoi les relations sont un concepts fondamental d’Inform.

La façon d’émuler les adjectifs de la plupart des langages de programmation lui paraît aussi insatisfaisante : généralement, on utilise des booléens (vrai ou faux) et on crée des fonctions dédiées pour évaluer ou changer leur valeur, mais comme ça ne découle pas directement du langage, ce sont les utilisateurs qui nomment les méthodes et il en résulte un manque d’uniformité dans la syntaxe qui peut causer des erreurs. Avec Inform, les adjectifs sont des propriétés que l’on a ou pas.

Le fait qu’I7 comprenne des formulations avec « all » permet d’éviter de créer des boucles comprenant des variables d’itération qui n’ont pas de sens concret et qui viennent entraver la compréhension de la source.

Il essaye aussi de limiter au maximum l’utilisation de nombres sans dimension dans I7 pour à la place adjoindre aux valeurs numériques des unités, ce qui permet d’éviter de comparer une longueur à une masse. Ainsi, on retrouve unbe caractéristique du langage naturel, où l’on utilise des nombres seuls uniquement quand on compte des choses.

Il remarque aussi que la plupart des langages de programmation ne connaissent que le présent, alors que l’on peut être tenté de chercher si telle ou telle condition a été vraie dans le passé. I7 comprend donc certaines phrases au passé, par exemple pour savoir si le joueur a déjà été dans un endroit précis. Le problème est que certaines formulations en anglais naturel sont ambiguës, cet aspect d’Inform est donc limité (spécialement quand on veut savoir le passé d’une variable).

Certains langages de programmation font aussi un usage intensif de la ponctuation, ce qui permettrait d’être moins ambigu, mais qui limite leur lisibilité. Inform utilise peu de ponctuation et détermine le sens du code par rapport au contexte. Graham Nelson se justifie en montrant que même des langages avec beaucoup de ponctuation comme le C ont des formulations ambiguës qui se résolvent grâce au contexte.

Enfin, Graham Nelson termine cette première partie en comparant les avantages et inconvénients de ce choix du langage naturel pour I7. Souvent, les avantages sont aussi des inconvénients. Le langage est plus familier pour la plupart des gens, mais moins pour celui qui a l’habitude de coder avec un langage « conventionnel ». Le langage naturel est aussi plus verbeux, et son expressivité peut créer du code moins optimisé.

Inform depuis 2015

Graham Nelson pense qu’Inform a quand même été un succès. Le langage a permis a beaucoup de gens venant d’un autre milieu que la FI à en écrire, a montré que le langage naturel fonctionnait et a été utilisé pour écrire des milliers d’œuvres.

Tout n’est bien sûr pas rose : le code d’Inform est vieillissant, pas très flexible et permet de créer un genre de niche dans un autre genre de niche (des FI à parser). Mais Graham Nelson confirme qu’il continue de travailler sur Inform avec son temps libre. Il décrit donc ce sur quoi il travaillait depuis 2015.

Pour cela, il décrit d’abord le fonctionnement interne d’Inform. Quand un auteur compile son histoire, sa source est convertie en Inform 6 par le compilateur d’Inform 7. Le compilateur Inform 6 transforme ce résultat en exécutable jouable (les fameux Z8 ou ULX). L’histoire est ensuite empaquetée avec un outil appelé cBlorb. Tout cela avait quelques défauts :

  • Le premier stade (quand la source I7 est convertie en I6) est bien trop gros et le code s’en occupant a souvent été réécrit, modifié et de plus en plus mal organisé.
  • S’agissant d’un vieux code en C, ce partie a un peu de mal avec les chaînes de caractères et le support d’Unicode.
  • Tous ces outils sont difficiles à utiliser seuls (en ligne de commande) sans l’usage de l’interface d’Inform 7.
  • Le code s’occupant de tester Inform est affreux, certains étant d’énormes scripts Perl difficiles à lire. C’est ce problème qui est le plus grand frein empêchant de rendre le code d’Inform public.
  • Inform ne peut que générer des histoires pour des machines virtuelles très spécifiques (Glulx ou la Z-machine). Il est difficile de l’utiliser pour des projets différents, faits avec Unity ou pour iOS.

Il fallait régler tous ces problèmes. Tout d’abord, l’outil de literate programming, inweb, a été réécrit notamment pour pouvoir diviser Inform en modules. La partie chargée de traduire la source d’un projet Inform 7 en Inform 6 a été séparée en deux partie pour rassembler toutes les fonctionnalités de base dans un module appelé « foundation ». Les autres étapes décrites ci-dessus ont été réécrites pour utiliser cette fondation (par exemple, cBlorb est devenu inblorb) et d’autres ont été ajoutées. L’autre partie d’Inform 7 a encore été subdivisée pour qu’elle devienne plus claire et polyvalente.

Mais l’ajout le plus important est l’ajout d’une nouvelle étape dans le processus menant d’une source Inform à une histoire jouable. Cette étape, nommée « inter », se place avant la traduction d’une source en I6. Après qu’Inform 7 se soit occupé d’analyser et comprendre la source d’un jeu, elle n’est plus traduite directement en Inform 6. Au lieu de cela, inter est utiliser pour générer un code intermédiaire qui sera traduit en Inform 6

Le premier bénéfice est d’enlever de la complexité à la première étape, qui n’est plus une énorme machine à tout faire. Le deuxième est que plutôt que de traduire ce code intermédiaire en I6, on pourrait imaginer le traduire en autre chose, comme par exemple en C# à destination de Unity. Enfin, cette étape sert de lien entre la source I7, le code I6 ou la bibliothèque standard d’Inform (les « templates »).

Graham Nelson a déjà effectué deux expérience avec inter. La première a été de ne pas forcer l’inclusion de toutes les Standard Rules d’Inform pour chaque jeu (par exemple ne pas inclure le code permettant de trier un tableau si cette fonctionnalité n’est pas utilisée dans jeu). La seconde est de fournir une version inter précompilée des Standard Rules pour qu’un auteur puisse compiler son histoire plus rapidement.

Tout le travail n’a pas encore été fait, et il arrive encore que le code intermédiaire créé par inter contienne du code Inform 6 générée à la première étape (l’objectif étant que tout l’I6 soit généré à partir du code inter à la place).

C’est donc cette restructuration du code d’Inform qui a occupé les trois dernières années de Graham Nelson, qui prévoit de faire sortir une nouvelle version cette année, contenant une partie de ces nouveautés. Si tout se passe bien, cette transition sera transparente pour les auteurs.

Graham Nelson termine en exprimant son souhait qu’Inform puisse faire plus que du parser et s’adapter à des interfaces et des plateformes différentes. Des exemple de ce qui pourrait être possible sont donnés.

Choix multiples :

clear the choices;
offer the choice "Run for the hills!" for going east;
offer the choice "Attack [the opponent]" for attacking the opponent;
offer the choice "Sleep on it..." for Scene 5;

Hyperliens :

The Gallery is a room "This is a gallery of [choice for examining the paintings]hideous avant-garde paintings[end]. A glowing read button marked DETONATOR must be for art's sake, because who would ever [choice for Scene of Annihilation]touch the exhibits in a swanky place like this[end]?"

(Ce ne sont pour l’instant que ces idées, rien de concret.)

La présentation se termine sur cela, le souhait de rendre Inform plus polyvalent et moderne, afin de pouvoir suivre plus facilement de qui se fait aujourd’hui plutôt que de devenir un outil obsolète.

Malheureusement pour nous francophones, rien n’a été dit concernant les prochaines possibilités de traduction d’Inform, mais tout semble quand même aller dans la bonne direction, et on espère qu’on aura des surprises bientôt !