77 lines
1.6 KiB
Markdown
77 lines
1.6 KiB
Markdown
# Exemples / DO-DON'T — Chapitre 27 — Mémoire, références et `unsafe`
|
|
|
|
> Document compagnon. Les exemples illustrent les règles du chapitre ; la formulation normative reste dans le chapitre lui-même.
|
|
|
|
## Exemples extraits du chapitre
|
|
|
|
### Exemple 1
|
|
|
|
```text
|
|
value vs reference semantics
|
|
object allocation
|
|
moves/copies/clones
|
|
borrow/reference semantics si nécessaire
|
|
escape analysis
|
|
lifetimes internes
|
|
partial construction
|
|
partial destruction
|
|
cycles éventuels
|
|
resource ownership
|
|
thread-safety implications
|
|
```
|
|
|
|
### Exemple 2
|
|
|
|
```text
|
|
unsafe { ... }
|
|
unsafe func
|
|
unsafe method
|
|
unsafe clsmethod
|
|
unsafe construct
|
|
unsafe union
|
|
```
|
|
|
|
### Exemple 3
|
|
|
|
```text
|
|
unsafe variable
|
|
unsafe constant
|
|
unsafe field
|
|
```
|
|
|
|
### Exemple 4
|
|
|
|
```text
|
|
mot-clé mut pour obtenir la mutabilité normale
|
|
borrow checker visible dans la syntaxe
|
|
lifetimes utilisateur omniprésents
|
|
ownership annotations pour les usages ordinaires
|
|
```
|
|
|
|
## DO / DON'T / WHY / compiler error / edge cases
|
|
|
|
À consolider progressivement avant la baseline publique V3 et à transformer, lorsque pertinent, en tests de conformité de la toolchain.
|
|
|
|
|
|
## Pointeurs — distinctions à préserver
|
|
|
|
```text
|
|
référence de classe
|
|
Slice<T>
|
|
pointeur Saselang
|
|
pointeur brut / FFI
|
|
function pointer
|
|
```
|
|
|
|
Les pointeurs explicites restent un sous-modèle mémoire dédié et ne remplacent pas les références/slices sûres dans le code ordinaire.
|
|
|
|
### Exemple — backing storage stable
|
|
|
|
```text
|
|
Vector<int32> values = ...;
|
|
Slice<int32> part = values::slice(0..<2);
|
|
|
|
values::reserve(1024); // une éventuelle relocalisation physique reste invisible
|
|
part[0]; // toujours valide
|
|
```
|