v0.2.12
This commit is contained in:
54
chapters/012-unions.md
Normal file
54
chapters/012-unions.md
Normal file
@@ -0,0 +1,54 @@
|
||||
# 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.
|
||||
|
||||
---
|
||||
Reference in New Issue
Block a user