Ce document fixe la stratégie d’implémentation pour éviter les régressions de sémantique pendant la transition vers une CLI native en C.
Node.js est l’implémentation canonique de la spécification :
- parseur conforme EBNF
- analyse statique normative
- diagnostics normatifs
- IR normatif
- validation via conformance kit
Statut : oracle sémantique (spec vivante), pas cible produit final.
La CLI C est l’implémentation de production :
- backend concret
- exécution système
- crédibilité bas niveau
- performance et intégration native
Statut : preuve d’implémentabilité bas niveau.
Node.js n’est pas une implémentation concurrente du C.
Node.js est la spec vivante.
Le C est la preuve que la spec est vraie.
Ce que Node apporte déjà est critique :
- vérité sémantique testée
- diagnostics stabilisés
- arbitrages language-level validés
Le supprimer pendant le portage C rendrait impossible l’attribution claire des bugs :
- bug de spec ?
- bug de backend C ?
- bug de frontend C ?
Sans oracle, cette distinction devient coûteuse et fragile.
Rester uniquement sur Node serait incohérent avec le positionnement de ProtoScript V2 :
- compilation C prioritaire
- coûts mémoire explicités
- modèle runtime sobre
La CLI C est donc nécessaire, mais pas au prix de perdre l’oracle Node.
Pipeline officiel :
ProtoScript source
|
v
Node.js frontend
(parse + analyse + IR)
|
v
IR normatif sérialisé
|
v
CLI C
(backend + runtime)
Conséquence immédiate :
- le frontend C complet (lexer/parser) n’est pas prioritaire au début
- la priorité est la convergence sémantique backend/runtime
- Node produit l’IR normatif
- C consomme l’IR et produit C/exécute
- aucune logique sémantique dupliquée sans nécessité
Pour chaque test normatif :
- Node : parse + analyse + IR
- C : consomme IR + backend/runtime
- comparer :
- accept/reject
- diagnostics (catégorie/code/position)
- comportement observable
Règle : tant que divergence, considérer d’abord un bug côté C.
Seulement après :
- backend C stable
- 100% de conformance
- opt-safety verte
Alors :
- implémenter lexer C
- implémenter parser C
- remplacer progressivement le frontend Node dans le chemin produit
Node reste maintenu comme validateur/oracle.
- Ne jamais activer les optimisations avant conformité complète et backend stable.
- Ne jamais accepter une divergence observable entre Node et C.
- Ne jamais supprimer les checks runtime normatifs sans preuve statique.
- Ne pas “simplifier” la spec pour contourner un bug backend.
- Geler Node comme frontend de référence.
- Stabiliser le format IR sérialisé (JSON lisible d’abord, cf.
IR_FORMAT.md). - Faire évoluer la CLI C en priorité sur backend/runtime.
- Exécuter conformance + opt-safety à chaque jalon significatif.