2.3 KiB
4. Couches de l'écosystème V1
4.1 Saselang Language — V1 REQUIS — FIGÉ
Le langage comprend notamment :
grammaire
types primitifs
types nominaux
fonctions/méthodes
classes
structs
interfaces
enums
unions
tuples
generics
contrôle de flux
erreurs/exceptions
opérateurs
unsafe
scope
visibilité
imports
compilation conditionnelle structurelle
4.2 Saselang Core — V1 REQUIS — À FINALISER
Le Core est minimal et contient les types fondamentaux non primitifs nécessaires au langage.
Les types compiler-known doivent rester rares.
Candidats actuellement nécessaires ou fortement retenus :
Object
String
Result<T>
Result<T,E>
Error
ResultError
Exception
Option<T>
Nullable<T>
Range<T>
RangeIterable<T>
RangeStep<T,Step>
RangeReverse<T>
RangeReverseStep<T,Step>
RangeProgression<T,Step>
Ordering
Op...
Iterable<T>
Iterator<T>
Array<T>
StaticArray<T,N>
TypeInfo
ExitCode
Le fait d'être compiler-known ne transforme pas un type en primitive.
Les primitives peuvent exposer des membres standard définis par le Core sans devenir des classes. Les conversions numériques standard constituent un exemple important : leur surface API appartient au Core, tandis que le compilateur ne connaît que les règles de typage, les contrats d'intrinsics et les opérations Sase IR nécessaires à leur validation et à leur lowering.
Une capacité Core peut être conditionnée par un target lorsqu'elle ne peut raisonnablement pas être garantie partout. Une optimisation matérielle ne suffit pas à rendre une capacité conditionnelle si une implémentation logicielle conforme est raisonnable. L'absence d'une capacité réellement requise doit être diagnostiquée à la compilation pour le target choisi.
4.3 Saselang SDK — V1 REQUIS — À FINALISER
Le SDK fournit les fonctionnalités de bibliothèque qui ne justifient pas une sémantique spéciale du compilateur :
collections
encodages explicites
regex
filesystem
networking
process
concurrence
math
algèbre
FFI helpers
plateforme
Le découpage exact Core/SDK doit être finalisé avant gel de l'API V1.
4.4 Runtime réduit — V1 REQUIS — FIGÉ EN PRINCIPE
Une application native simple ne doit pas être forcée d'embarquer un runtime monolithique.
Les services runtime doivent être ajoutés par capacités réelles.