Nouveauté sur Inform 7

A part le langage supposé naturel mais que je trouve personnellement un peu fouilli et peu lisible, qu’y a-t-il de nouveau dans Inform 7 par rapport à Inform 6?

Est-ce que certaines notions ont été intégrés en standard, genre gestion des liquides, ou des adjectifs, autre chose?

Il n’y a pas vraiment de « langage naturel », le site d’inform 7 indique « a design system for interactive fiction based on natural language. »
D’ailleurs il faudra que je modifie le tuto en ce sens, car on pourrait croire que Inform 7 va essayer de tout comprendre ou que la programmation n’est pas structurée.

Mais c’est vraiment un langage déclaratif (et non pas impératif comme C++ ou Inform 6), c’est à dire que l’on décrit simplement des états, des règles, et des prédicats et ensuite le programme se débrouille pour tout faire fonctionner ensemble, comme dans le monde réel : en.wikipedia.org/wiki/Declarative_programming

J’avais déjà cité ici le système d’équations, je redonne le lien :

inform7.com/learn/man/doc233.html

Et mieux que cela, si vous avez I7 d’installé, vous pouvez regarder l’extension incluse dans « metric units » par Graham Nelson, l’exemple est impressionant :

[code]« Galileo, Galileo »

Include Metric Units by Graham Nelson.

The acceleration due to gravity is an acceleration that varies.

Laboratory is a room. « An elegant Pisan room, with fine Renaissance panels, except for the teleport corridor to the east. » A cannon ball and a feather are in the Laboratory.

Martian Outpost is east of the Laboratory. « A reddish-lit room with steel walls, whose only exit is the teleport corridor to west. »

A room has an acceleration called gravitational field. The gravitational field of a room is usually 9.807 m/ss. The gravitational field of the Martian Outpost is 3.69 m/ss.

A thing has a mass. The mass of a thing is usually 10g. The mass of the cannon ball is 2kg.

Dropping it from is an action applying to one thing and one length.

Understand « drop [thing] from [length] » as dropping it from.

Check dropping it from:
if the player is not holding the noun:
say « You would need to be holding that first. » instead.

Check dropping it from:
if the length understood is greater than 3m:
say « Just how tall are you, exactly? » instead.

Check dropping it from:
if the length understood is 0m:
try dropping the noun instead.

Equation - Newton’s Second Law
F=ma
where F is a force, m is a mass, a is an acceleration.

Equation - Principle of Conservation of Energy
mgh = mv^2/2
where m is a mass, h is a length, v is a velocity, and g is the acceleration due to gravity.

Equation - Galilean Equation for a Falling Body
v = gt
where g is the acceleration due to gravity, v is a velocity, and t is an elapsed time.

Carry out dropping something (called the falling body) from:
now the acceleration due to gravity is the gravitational field of the location;
let m be the mass of the falling body;
let h be the length understood;
let F be given by Newton’s Second Law where a is the acceleration due to gravity;
say "You let go [the falling body] from a height of [the length understood], and, subject to a downward force of [F], it falls. ";
now the noun is in the location;
let v be given by the Principle of Conservation of Energy;
let t be given by the Galilean Equation for a Falling Body;
let KE be given by KE = mv^2/2 where KE is an energy;
say « [t to the nearest 0.01s] later, this mass of [m] hits the floor at [v] with a kinetic energy of [KE]. »;
if the KE is greater than 50J:
say « [line break]This is not doing either the floor or your ears any favours. »

Test me with « get ball / drop it from 1m / get ball / drop it from 2m / get ball / drop it from 3m / get ball / drop it from 3.2m / get ball / drop it from 0m / get all / east / drop ball from 3m / drop feather from 3m ».[/code]

Pour l’histoire des facilités avec les liquides etc, il n’y a pas vraiment de choses incluses je crois à ce niveau, mais il existe maintenant beaucoup d’extensions qui gèrent cela, voir inform7.com/extensions/physics/#Liquids

D’autre part, on a beaucoup de recettes dans le manuel du même nom : The Inform Recipe Book
inform7.com/learn/man/Rindex.html

Quelqu’un, peut-être toi, indiquait que cela pourrait être intéressant de continuer à coder en I6, et l’inclure dans I7 pour profiter peut-être de quelques avantages. Déjà cela ne sera pas très facile, mais surtout je crois qu’une fois qu’on a vraiment goûté aux facilités d’I7, on n’a plus trop envie de revenir en arrière.

Si on a besoin de créer dans le café un PNJ qui ne fera pas grand chose et qui s’appelle Suzanne, il suffit d’écrire « Suzanne is a woman in Café », et ça suffit, pas besoin de copie tout le code que l’on a habituellement dans Inform 6. Idem pour les objets du décor.

Le système des scènes est vraiment pratique aussi. On peut faire sans (c’est à dire avec des variables globales et plein de tests), mais c’est plus long.

J’avais cité également la facilité de faire varier du texte aléatoirement, au lieu d’utiliser les switch(random(10), on peut écrire :
say « [one of]blabla1[or]blabla2[or]blabla3[at random] »

Dans le commentaire facebook, tu parles de la complication de
« A person can be dead. A person is usually not dead. »
(ou du fait que tu ne trouves pas cela très sexy à écrire).

Mais en I6 c’est, il me semble, pas mieux : si on veut créer quelque chose de similaire, on peut utiliser des constantes (attribute) à rajouter et modifier avec « give John Doe dead », au lieu d’écrire « now John Doe is dead ». Seulement dans I7 le « A person is usually not dead » cela va initialiser tous les « attribute » avec une valeur par défaut. Les classes sont pratiques à utiliser également.

C’est sûr qu’Inform 6 demande beaucoup plus de code.

Mais il offre un contrôle beaucoup plus fin.
Et comme je n’aime pas beaucoup les objets qui ont tous les même réponses standard, j’ai besoin de beaucoup de Before et de variables, ce qui ne me semble pas très élégant à gérer avec I7. Et puis quand je regarder une page de code I7, j’ai l’impression de lire un roman… c’est pas du tout ce que je cherche quand je programme, où j’ai besoin de retrouver en un coup d’oeil une variable ou une valeur précise.

Bon, j’ai pas essayé du tout I7 donc je ne veux pas condamner le langage sans avoir au moins fait une IF avec… mais j’avoue que pour l’instant je reste trèèèès sceptique =)
L’exemple Galileo a quand même l’air bourrin, je vais voir ça!

Je n’ai pas non plus parlé de l’IDE, qui permet de lister tous les objets, scènes, lieux, classes, variables, et d’y accéder directement dans le code… :wink:

Un présentation d’Andrew au sujet des différences de concept par rapport à un système de programmation classique : eblong.com/zarf/essays/rule-based-if/