55 lines
1.4 KiB
Markdown
55 lines
1.4 KiB
Markdown
# 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 :
|
|
|
|
```text
|
|
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
|
|
|
|
```text
|
|
public unsafe union RawValue
|
|
```
|
|
|
|
permet des types mémoire triviaux dont certaines représentations peuvent être invalides :
|
|
|
|
```text
|
|
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` :
|
|
|
|
```text
|
|
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.
|
|
|
|
---
|