v0.2.14
This commit is contained in:
@@ -189,7 +189,76 @@ Le modèle doit aussi permettre de décrire les capacités atomiques pertinentes
|
||||
|
||||
Une capability statique signifie que l'environnement fournit la capacité ; elle ne garantit pas qu'une opération runtime particulière réussira.
|
||||
|
||||
## 40.9 Compatibilité target/dépendance — V1 REQUIS — FIGÉE EN PRINCIPE
|
||||
## 40.9 Propriétaires et identifiants de capabilities — V1 REQUIS — DIRECTION FIGÉE
|
||||
|
||||
Les capabilities utilisent une nomenclature hiérarchique commune, ASCII, en minuscules, séparée par `.`.
|
||||
|
||||
Le premier segment identifie le propriétaire sémantique :
|
||||
|
||||
```text
|
||||
language.*
|
||||
core.*
|
||||
target.*
|
||||
platform.*
|
||||
sdk.*
|
||||
```
|
||||
|
||||
Exemples conceptuels :
|
||||
|
||||
```text
|
||||
language.exceptions
|
||||
core.numeric.float128
|
||||
core.collections.array
|
||||
target.atomic.int64
|
||||
target.simd.float32
|
||||
platform.filesystem
|
||||
platform.network
|
||||
sdk.logging
|
||||
```
|
||||
|
||||
Cette organisation permet de regrouper les capacités par propriétaire et d'éviter un registre global plat.
|
||||
|
||||
Les noms exacts et le registre exhaustif seront stabilisés avec le Core/SDK, mais un même concept ne doit pas recevoir des conventions concurrentes telles que `hasFloat128`, `supports_float128` et `numeric-f128`.
|
||||
|
||||
Les packages utilisateurs ne doivent pas usurper les espaces de noms de capabilities réservés à la toolchain/Core/SDK.
|
||||
|
||||
## 40.10 Niveaux de capacité — V1 REQUIS — FIGÉ EN PRINCIPE
|
||||
|
||||
Trois niveaux conceptuels sont distingués :
|
||||
|
||||
```text
|
||||
Language-required
|
||||
sémantique nécessaire à tout compilateur Saselang conforme
|
||||
|
||||
Core-required-for-supported-type
|
||||
contrat Core obligatoire dès que le type/capacité fondamentale existe
|
||||
sur le target
|
||||
|
||||
Core/target optional capability
|
||||
fonctionnalité réellement optionnelle ou spécifique d'un environnement
|
||||
```
|
||||
|
||||
Exemple : si un target supporte `float128`, les conversions Core fondamentales définies par la matrice numérique pour `float128` doivent être disponibles.
|
||||
|
||||
Le target ne peut pas exposer `float128` tout en supprimant arbitrairement certaines conversions fondamentales simplement parce que le matériel n'offre pas une instruction native correspondante.
|
||||
|
||||
## 40.11 Émulation logicielle — V1 REQUIS — FIGÉ
|
||||
|
||||
Lorsqu'une fonctionnalité fondamentale peut raisonnablement être émulée de façon conforme, l'absence d'un support matériel natif ne la rend pas indisponible.
|
||||
|
||||
```text
|
||||
instruction native disponible
|
||||
lowering/backend direct ou optimisé
|
||||
|
||||
instruction native absente
|
||||
implémentation logicielle conforme
|
||||
```
|
||||
|
||||
La différence doit porter sur les performances, pas sur la sémantique visible.
|
||||
|
||||
Un target réellement contraint peut ne pas fournir un type/capacité fondamentale entière. Dans ce cas, le diagnostic doit porter sur cette capacité ou ce type, plutôt que sur l'absence aléatoire d'une méthode secondaire.
|
||||
|
||||
## 40.12 Compatibilité target/dépendance — V1 REQUIS — FIGÉE EN PRINCIPE
|
||||
|
||||
Un package ou une dépendance peut déclarer des contraintes de target/platform/ABI/capabilities.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user