Repository navigation
Concepts
- Source logique — le programme : modules et nœuds, avec leurs propriétés, enfants syntaxiques et références symboliques. C’est la référence persistable.
- AST et analyses — arbre, portées, types, diagnostics. Dérivés, recalculés, jamais enregistrés comme sauvegarde.
- Présentation — positions, tailles, pliage, cartes Comment/Image, vue, sélection. Séparée de la source.
Cette séparation permet d’éditer l’interface sans toucher au programme, et d’analyser la source sans React ni DOM.
- Le canvas est la surface navigable.
- Une carte Module est une unité logique. Elle partage son identifiant avec un module source.
- Une carte Class est un module source
kind: 'class'avec deux scopes, public et private. - Un nœud est une construction du langage : fonction, variable, condition, boucle, littéral, etc.
- Les nœuds sont reliés par des slots (
children) :initializer,test,body,statements,parameters… - Une référence pointe vers une déclaration sans être un enfant syntaxique.
Une fonction peut être marquée Entry point. Elle est alors exécutée par Run. Le nom main n’a aucun rôle automatique.
- Zéro ou une fonction point d’entrée par projet.
- Le moteur diagnostique les doublons (
ENTRY_POINT_DUPLICATE). - L’entrée doit être sans paramètre pour une simulation globale.
Le langage est strictement et statiquement typé :
- dix primitifs :
short int,short uint,int,uint,float,double,string,char,boolean,void; - tableaux
{kind:'array', elementType}; - pointeurs
{kind:'pointer', pointee}vers un primitif nonvoid; - signatures de fonction
{kind:'function', parameters, returnType}.
Aucune conversion implicite. Une expression non typable reste représentable, mais sans type attribué et avec diagnostics.
- Un module possède des racines (
rootNodeIds), des imports et des exports. - Les fonctions et types se déclarent à la racine d’un module.
- Un export rend une fonction visible aux autres modules ; un import crée un nom local.
- Une flèche courbe relie l’exportateur au module qui utilise réellement l’export.
Une classe est un module kind: 'class' avec deux scopes : public et private. Ses membres — attributs, constantes, méthodes et constructeur — portent une visibilité. Elle s’instancie avec new, this désigne l’instance courante et son type {kind:'class', classId} s’annote comme les autres types. Aucun héritage ni polymorphisme ; les classes sont transpilées en JavaScript/Python et refusées par le C expérimental.
Le workspace est un dossier version 3 choisi par l’utilisateur, contenant workspace.sp3, images/ et backups/. Les versions 1 et 2 sont migrées à la lecture. Voir Fichiers .sp3.
- Les positions et tailles des cartes.
- Les annotations Comment et les cartes Image.
- Le pliage, la sélection, la vue.
- Le manifeste d’exercice (dans le workspace, pas dans
project).
La simulation est déterministe pour un programme et des entrées donnés. Les opérations aléatoires existent, mais un exercice ne doit pas dépendre d’un état externe ou d’un tirage non reproductible.
Sapphire 3 — wiki du projet. Licence MIT. Documentation source : docs/ et abstract/. Dernière mise à jour : 11 novembre 2026.
Sapphire 3
Comprendre
Utiliser
Projet