Un modèle isotopique tient dans un fichier texte, lisible sans le logiciel qui l'a produit, versionnable comme du code, et qui signifie la même chose pour tout moteur conforme. IGL est la spécification de ce fichier. Il est intégré nativement à IsoFind, qui sait émettre ses modèles et les rejouer, mais IsoFind en est un utilisateur et non le propriétaire.
Le langage en bref
PHREEQC a résolu ce problème pour la géochimie aqueuse il y a trente ans, et ses fichiers d'entrée se lisent encore.
Un fichier de projet enfermé dans un format propriétaire meurt avec la version qui l'a écrit. Un fichier IGL reste lisible dans un éditeur de texte, se compare ligne à ligne, et se dépose en annexe d'article.
Publier un résultat ne dit pas comment il a été obtenu. Publier le modèle qui l'a produit permet de le rejouer, de le contester et de le réutiliser sur d'autres données.
La spécification est publiée séparément de l'implémentation. Écrire un second moteur ne demande aucune autorisation, et la suite de conformité tranche la question de savoir s'il est conforme.
Un en-tête de bloc commence en colonne zéro, ses instructions sont indentées. Cette seule règle permet à un bloc de se terminer implicitement au suivant, sans accolade ni imbrication à suivre.
# Réduction du chrome en système fermé TITLE Chromium reduction in a closed system META author "Colin Ferrari" language 0.5 STANDARD standard NIST-SRM-979 0.11339 ratio 53Cr/52Cr ISOTOPES ratio 53Cr/52Cr standard NIST-SRM-979 SPECIES species Cr(VI) species Cr(III) RESERVOIR Groundwater volume 1 L Cr(VI) 1 umol/kgw delta53Cr 0 permil PROCESS Reduction type reduction reactant Cr(VI) product Cr(III) location Groundwater extent 0.6 FRACTIONATION Reduction isotope 53Cr/52Cr epsilon -3.5 MODEL Closed progress extent processes [ Reduction ] OUTPUT variable Groundwater.delta53Cr
Le fichier ci-dessus se compile, s'exécute et rend une valeur analytique exacte. Il ne dépend d'aucune base, d'aucun réseau et d'aucune version d'IsoFind.
Un profil décrit ce qu'une implémentation revendique, non un palier qu'elle franchit. Core est toujours accepté, quel que soit le reste.
Le socle : réservoirs, espèces, processus, fractionnement, cinétique, modèle et sorties.
SAMPLE et IDENTIFY, pour retrouver une chaîne de transformation à partir de deux signatures.
PHREEQC, adsorption, échange, ajustement, Monte-Carlo, sensibilité, tracés et rapports.
Une implémentation qui rencontre un bloc d'un profil qu'elle ne revendique pas refuse le modèle avec le diagnostic IG005. Elle ne l'ignore pas : ignorer un bloc en silence produit un résultat numériquement plausible à partir d'un modèle amputé, ce qui est pire qu'un refus.
Une spécification à implémentation unique est une spécification que personne n'a testée.
Des modèles que le langage doit accepter et des modèles qu'il doit refuser, chacun portant le code de diagnostic attendu. Le corpus est engendré depuis les exemples de la spécification elle-même : une spécification modifiée sans régénération casse la construction au lieu d'être remarquée six mois plus tard.
Des modèles dont la valeur attendue vient d'une forme close, jamais d'une exécution enregistrée. Un test dont l'attente provient du programme qu'il teste ne mesure que l'accord de ce programme avec lui-même.
Un moteur Rust et un moteur Python passent les mêmes vérifications, sans qu'une ligne ait été copiée de l'un à l'autre. C'est la seule preuve qu'une spécification est réellement réimplémentable par un tiers.
La spécification, la référence des blocs, les 41 diagnostics, les outils et les exemples travaillés sont publiés sur igl-lang.org, indépendamment d'IsoFind. Le code source est public.
All Rights Reserved by IsoFind