Documentation

Se servir d'IGL avec IsoFind

Comment installer la chaîne d'outils, écrire un modèle, le compiler, l'exécuter et lire ses diagnostics. Cette page couvre l'usage ; la norme elle-même est publiée sur igl-lang.org.

Repères

Commandeigl
Version du langage0.5
Entrée du moteurmodel.iglir.json
Sortie du moteurresults.json, format 1.0
Paquet Pythonpip install igl-lang
Installation

Livré avec IsoFind, mis à jour séparément

Un binaire IGL accompagne IsoFind, mais une installation séparée prend le dessus : le langage évolue à son rythme.

Avec IsoFind

Rien à faire. La commande est disponible et la version livrée est celle validée avec la version d'IsoFind installée.

Installation séparée

Une installation système de la chaîne d'outils est détectée et employée en priorité, ce qui permet de suivre les versions du langage sans attendre une mise à jour du logiciel.

Depuis Python

pip install igl-lang installe les liaisons Python, utiles pour engendrer ou lire des modèles depuis un script.

La ligne de commande

Six sous-commandes, un seul programme

La commande s'appelle igl. Elle porte une option --profile pour déclarer le profil attendu, et rend un code de sortie qui distingue une erreur de source d'un défaut du programme.

Sous-commandeEffet
checkAnalyse et valide la source. Ne produit aucun fichier.
parse [--json]Rend l'arbre syntaxique, en JSON avec l'option.
build [-o]Compile vers le graphe intermédiaire .iglir.json, provenance comprise.
run [-o]Exécute un graphe et écrit un document de résultats au format 1.0.
fmt [--check]Reformate ligne à ligne en préservant les commentaires ; --check n'écrit rien.
explainAffiche l'explication d'un code de diagnostic.

Codes de sortie

0Rien à signaler
1Erreurs dans la source
2Erreur d'invocation ou de lecture
3Défaut du programme
Le flux de travail

Trois fichiers, deux contrats

La source se compile en un graphe intermédiaire, que le moteur exécute pour produire un document de résultats. Les deux formats sont versionnés indépendamment du langage.

igl
# 1. Vérifier la source sans rien produire
$ igl check model.igl
ok

# 2. Compiler vers le graphe intermédiaire
$ igl build model.igl -o model.iglir.json

# 3. Exécuter le graphe et écrire les résultats
$ igl run model.iglir.json -o results.json

# 4. Comprendre un diagnostic
$ igl explain IG211

La séparation a une raison pratique : un moteur tiers n'a pas à savoir analyser IGL, il lui suffit de lire le graphe. Et une exécution qui échoue écrit tout de même son fichier de résultats, avec la provenance du modèle, capturée avant que quoi que ce soit puisse échouer.

Écrire un modèle

Trois règles à connaître

En-tête en colonne zéro

Un en-tête de bloc commence en colonne zéro, ses instructions sont indentées. Un bloc se termine implicitement au suivant, sans accolade ni imbrication.

Les noms sont globaux

Un réservoir et un processus ne peuvent pas porter le même nom, sans quoi un chemin qualifié deviendrait ambigu. Aucun mot n'est réservé globalement : la position décide de ce qu'un jeton signifie.

Notation ASCII stricte

Les rapports s'écrivent 53Cr/52Cr et les deltas delta53Cr. Le rendu typographique est réservé aux rapports et aux exports, jamais à la source.

Diagnostics

Quarante et un codes, numérotés une fois

Un code signifie la même chose dans toute implémentation conforme. C'est l'intérêt de les numéroter : on cherche IG211 et on trouve une page de référence, pas un fil de discussion.

La plage dit la nature de la faute

Elle ne dit pas quelle phase l'a détectée. Un code syntaxique émis par le lieur reste dans la plage syntaxique.

Un profil non revendiqué refuse

Rencontrer un bloc d'un profil non déclaré produit IG005 et arrête la compilation. Ignorer le bloc rendrait un résultat plausible depuis un modèle amputé.

Suggestion par proximité

Une référence inconnue proche d'un nom existant est signalée avec la correction probable, la distance étant bornée pour éviter les suggestions absurdes.

Bases et couplage

Ce que le moteur va chercher ailleurs

Bloc DATABASE

Le moteur lit les fichiers .igdb nommés, complète les standards absents avec leur citation, résout les facteurs qu'un processus ne déclare pas, et rapporte l'origine de chaque valeur dans les diagnostics du fichier de résultats.

Mode relatif

ISOTOPES mode relative dispense de standard, un écart de deltas ne dépendant pas de la référence contre laquelle les deux ont été mesurés. Il se déclare et ne se déduit jamais.

Couplage PHREEQC

Le bloc PHREEQC lance l'exécutable en sous-processus et lie les colonnes de sa sortie à des paramètres. Il exige la version batch, des chemins absolus, et une base toujours passée explicitement.

La norme fait autorité, pas cette page

La spécification, la référence de chaque bloc et les quarante et un diagnostics sont publiés sur igl-lang.org. En cas de désaccord entre cette page et la spécification, c'est la spécification qui a raison.