This commit is contained in:
2026-09-12 08:56:27 +02:00
parent 426aa92d0d
commit 18306bdc8c
116 changed files with 11080 additions and 0 deletions

View File

@@ -0,0 +1,86 @@
# 17. Construction et destruction
## 17.1 Constructeur unique — V1 REQUIS — FIGÉ
Une classe ou struct possède au maximum un `construct` effectif explicite ou synthétique.
Pas de surcharge de constructeur.
## 17.2 Visibilité de `construct` — V1 REQUIS — FIGÉ
Classe :
```text
private
protected
module
package
public
```
Struct :
```text
private
module
package
public
```
`unsafe construct` est autorisé si l'appelant doit garantir des invariants que le compilateur ne peut pas vérifier.
## 17.3 Construction dérivée — V1 REQUIS — FIGÉ
Chaque classe possède son propre constructeur effectif ; les constructeurs ne sont pas hérités comme des méthodes.
Le compilateur peut synthétiser un constructeur à partir :
- du constructeur effectif du parent immédiat ;
- des nouveaux champs qui nécessitent une initialisation.
Chaîne :
```text
C -> B -> A
```
Jamais `C -> A` directement.
## 17.4 `super::construct(...)` — V1 REQUIS — FIGÉ
Il doit être exécuté exactement une fois sur chaque chemin de construction valide avant toute utilisation de l'état parent via `this`/`super`.
Il n'a pas besoin d'être textuellement la première instruction : des calculs locaux indépendants peuvent le précéder.
Le compilateur doit prouver la definite construction.
Avant construction du parent, sont notamment interdits :
```text
this::field
this::method()
super::method()
escape/capture/pass de this
```
## 17.5 Destructeur — V1 REQUIS — FIGÉ EN PRINCIPE
Au maximum un `destruct` effectif.
Le destructeur est un hook de lifecycle automatiquement invoqué.
Il n'est pas appelable directement par le programmeur et ne possède donc pas de visibilité utilisateur normale.
```text
destruct() {
...
}
```
S'il doit effectuer des opérations unsafe, il utilise un bloc `unsafe` interne.
## 17.6 Fallibilité de `construct`/`destruct` — V1 REQUIS — À FINALISER
Le lien exact avec `Result`, exceptions, construction partielle et cleanup doit être fermé avec le modèle mémoire et les exceptions.
---