steel.org

Architecture interne - Steel

Vue d’ensemble

Steel est organisé en modules fonctionnels selon le pipeline de configuration :

INPUT (SteelConfig, toolchains, targets)
  ↓
[PARSER] → tokens/AST
  ↓
[VALIDATOR] → coherence check
  ↓
[RESOLVER] → resolved configuration
  ↓
[GENERATOR] → Steelconfig.mcfg
  ↓
OUTPUT (consommé par le runner)

Modules par fonction

Parser (parser::*)

Validator (validator::*)

Resolver (resolver::*)

Generator (generator::*)

Model (model::*)

Runtime (runtime::*)

CLI (cli::*)

Utils (utils::*)

Metadata (metadata::*)

Platform (platform::*)

Flux de données

Phase 1 : Configuration (build steel)

1. LOAD
   SteelConfig → (arscan) → tokens
                 ↓
   tokens → (read) → AST (Workspace, Packages, Profiles, Targets)

2. VALIDATE
   AST → (config) → ✓ global coherence
         ↓
         (dependancies) → ✓ references, graph
         ↓
         (target_file) → ✓ target specs

3. RESOLVE
   AST → (default) → with defaults
         ↓
         (variable) → resolved vars
         ↓
         (expand) → interpolated
         ↓
         (implicit) → resolved rules
         ↓
         ConfigResolved

4. GENERATE
   ConfigResolved → (output) → Steelconfig.mcfg
                               + exports (DOT, JSON, etc.)

Phase 2 : Construction (execution)

Le runner lit Steelconfig.mcfg et :

Points clés

Séparation Déclaratif/Exécutif

Steelconfig.mcfg comme contrat

Determinisme

Dépendances externes

Conventions de code

Nommage des modules

Erreurs

Tests

Points d’extension

Ajouter une nouvelle commande

  1. Implémenter dans commands.rs
  2. Ajouter enum variant dans CLI
  3. Router dans src/bin/steel.rs

Ajouter un nouveau type de target

  1. Étendre model::Target
  2. Ajouter règles implicites dans implicit.rs
  3. Valider dans validator::*

Supporter un nouvel OS/arch

  1. Implémenter trait OS dans runtime::os.rs
  2. Ajouter implémentation spécifique dans platform::*
  3. Router dans interface.rs selon contexte