Sans eval, sans dictionnaire — juste la stack.
Série : MOGWAI Deep Dive · v8.3 · coding4phone.com
La plupart des langages de script qui supportent le nommage dynamique de variables s’appuient sur eval — un outil brutal qui exécute une chaîne arbitraire comme du code. Ça fonctionne, mais c’est opaque, souvent risqué, et philosophiquement incompatible avec un système de types cohérent. D’autres langages vous poussent vers des dictionnaires ou de la réflexion, au prix de verbosité et d’indirection.
MOGWAI prend une voie différente. Parce que c’est un langage RPN orienté stack, données et code coexistent naturellement sur la pile — et le nommage dynamique devient une composition propre de trois petites primitives. Pas de magie. Pas d’échappatoire. Juste la stack, qui fait son travail.
Le pattern en un coup d’œil
Voici un exemple concret : créer 1 000 variables nommées $V1 à $V1000, chacune contenant un entier aléatoire entre 0 et 99.
1 1000 for 'i' do {
rand 100 * ->int
-> { ! "$V" i + ->name }
}
Décortiquons cela étape par étape.
Exécution pas à pas
1 — Produire la valeur
rand 100 * ->int
| Étape | Stack | Note |
|---|---|---|
rand | 0.731… | float ∈ [0, 1[ |
100 * | 73.1… | mis à l’échelle [0, 100[ |
->int | 73 | entier ∈ [0, 99] |
Rien de surprenant — une séquence RPN classique qui laisse l’entier aléatoire sur la stack.
2 — Construire le nom de variable
{ ! "$V" i + ->name }
C’est le cœur du pattern. L’opérateur ! en tête du bloc demande à MOGWAI d’auto-évaluer le bloc immédiatement, au lieu de le pousser sur la stack comme un objet appelable. Le moteur exécute donc le corps du bloc en ligne :
| Étape | Stack | Note |
|---|---|---|
"$V" | "$V" | une simple chaîne |
i | "$V" 5 | compteur de boucle |
+ | "$V5" | concaténation de chaînes |
->name | '$V5' | chaîne → nom de variable |
La transition clé est ->name : elle convertit la chaîne "$V5" — une donnée — en le nom '$V5' — une référence symbolique. Ce sont deux types distincts dans MOGWAI. Pas de coercition implicite, pas de surprise : on franchit la frontière explicitement, délibérément.
3 — L’affectation
->
Dans MOGWAI, l’opérateur -> est du sucre syntaxique pour STO. Il dépile un nom au sommet de la stack et la valeur juste en dessous, et stocke la valeur sous ce nom. À ce stade la stack contient :
| Moment | Stack | Note |
|---|---|---|
avant -> | 73 '$V5' | valeur puis nom, nom au sommet |
après -> | (vide) | 73 stocké dans $V5 |
Ce qui est équivalent à : 73 '$V5' STO. La stack est propre, la variable existe, on passe à l’itération suivante.
Pourquoi c’est important
Dans de nombreux langages, le nommage dynamique de variables oblige à recourir à un échappatoire. Comparons :
Autres langages
eval(f"V{i} = {val}") # Python — risqué, opaque
# ou contournement par dictionnaire :
d = {}
d[f"V{i}"] = val # indirect, plus vraiment des variables
val -> { ! "$V" i + ->name }
eval est puissant mais dangereux — il exécute du code arbitraire, court-circuite toute analyse statique et est impossible à raisonner formellement. Le contournement par dictionnaire est sûr mais indirect : on ne travaille plus vraiment avec des variables, on compense leur absence.
L’approche MOGWAI est explicite et composable : on construit le nom comme une donnée, on le promeus en référence symbolique avec ->name, et on le passe à -> comme n’importe quel autre nom. La stack est le seul medium. Chaque étape est visible, traçable, et debuggable dans MOGWAI Studio.
Insight clé
Ce pattern est une expression de l’homoïconicité sur la stack. Données et noms coexistent dans le même espace. La frontière entre eux n’est pas dissoute — elle est franchissable délibérément, une primitive à la fois. C’est ce que MOGWAI hérite de la tradition HP RPL.
Les trois primitives
Tout le pattern repose sur trois briques :
!— auto-évalue un bloc immédiatement, intégrant son exécution dans le flux courant.->name— promeut une chaîne en nom de variable, franchissant explicitement la frontière donnée/référence.->— stocke une valeur sous un nom (STO), consommant les deux depuis la stack.
Chaque primitive est simple et générique. Aucune n’a été conçue spécifiquement pour le nommage dynamique — et pourtant leur composition produit exactement cette capacité. C’est en tout cas l’idéal visé : une puissance qui émerge de primitives cohérentes, et non de cas spéciaux.
Applications pratiques
Le pattern est le plus utile dans les contextes de scripting générique : génération de données de test (comme illustré ci-dessus), moteurs de templates, scaffolding de configuration, ou tout scénario où les noms de variables ne sont pas connus à l’écriture mais suivent une structure prévisible.
Dans les projets métier typiques, les structures de données sont souvent fixes et bien définies — ce pattern n’est donc pas forcément sollicité au quotidien. Mais il est là, disponible, pour le jour où un script devra construire son propre espace de nommage à la volée.
C’est la valeur silencieuse d’un langage bien composé : on n’utilise pas forcément chaque pattern chaque jour, mais quand le besoin se présente, les outils sont déjà là — propres, composables, et exactement où on les attend.
MOGWAI — open source depuis février 2026 · GitHub · coding4phone.com