1.4 KiB
12. Unions
12.1 union sûre — V1 REQUIS — FIGÉ
Une union sûre est un overlay mémoire nominal limité à des représentations binaires compatibles dont chaque motif de bits est acceptable selon les règles définies.
V1 vise initialement les familles primitives numériques :
int*
uint*
float*
Tous les champs recouvrent la même zone mémoire.
La taille correspond au membre le plus grand, avec alignement/padding requis.
Lire une autre vue est une réinterprétation de bits définie par Saselang.
Pas de tag, pas de match exhaustif automatique.
12.2 unsafe union — V1 REQUIS — FIGÉ EN PRINCIPE
public unsafe union RawValue
permet des types mémoire triviaux dont certaines représentations peuvent être invalides :
bool
char
raw pointers
fixed compatible arrays
FFI-safe trivial structs
compatible unsafe unions
Les types avec ownership/lifecycle non trivial tels que String, fichiers, classes ou collections dynamiques ne doivent pas être stockables arbitrairement dans une raw union V1.
Les règles exactes de validité et d'accès sont liées au modèle mémoire V1.
12.3 ABI C — V1 REQUIS — À FINALISER
Le linkage/ABI est orthogonal à unsafe :
public unsafe extern "C" union NativeValue
La syntaxe canonique des unions FFI est conservée ; la liste exacte des layouts garantis doit être finalisée avec la FFI.