Skip to content

Concepts

lalBi94 edited this page Nov 11, 2026 · 3 revisions

Concepts

Trois couches distinctes

  1. 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.
  2. AST et analyses — arbre, portées, types, diagnostics. Dérivés, recalculés, jamais enregistrés comme sauvegarde.
  3. 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.

Canvas, modules, nœuds

  • 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.

Point d’entrée

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.

Typage

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 non void ;
  • signatures de fonction {kind:'function', parameters, returnType}.

Aucune conversion implicite. Une expression non typable reste représentable, mais sans type attribué et avec diagnostics.

Modules, exports, imports

  • 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.

Classes

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.

Workspace

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.

Ce qui reste hors du modèle logique

  • 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).

Déterminisme

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.

Clone this wiki locally