53 lines
1.2 KiB
Markdown
53 lines
1.2 KiB
Markdown
# 29. FFI et ABI
|
|
|
|
## 29.1 ABI C — V1 REQUIS — FIGÉ
|
|
|
|
Le premier ABI externe officiellement ciblé est C :
|
|
|
|
```text
|
|
extern "C"
|
|
```
|
|
|
|
## 29.2 `extern` — V1 REQUIS — FIGÉ EN PRINCIPE
|
|
|
|
`extern` est réservé aux déclarations qui représentent réellement une frontière de linkage/ABI.
|
|
|
|
Typiquement :
|
|
|
|
```text
|
|
extern "C" func
|
|
unsafe extern "C" func
|
|
extern "C" union
|
|
unsafe extern "C" union
|
|
```
|
|
|
|
Pas de `extern` décoratif sur classes/interfaces/méthodes ordinaires.
|
|
|
|
## 29.3 FFI safety — V1 REQUIS — FIGÉ EN PRINCIPE
|
|
|
|
Une fonction externe n'est pas automatiquement unsafe par simple fait d'être externe, mais toute API dont l'appelant doit respecter des invariants externes non vérifiables doit être déclarée `unsafe`.
|
|
|
|
## 29.4 Layout/interop — V1 REQUIS — À FINALISER
|
|
|
|
À définir :
|
|
|
|
```text
|
|
C struct layout
|
|
C enum mapping
|
|
raw pointers
|
|
strings C
|
|
callbacks
|
|
function pointers
|
|
calling conventions
|
|
variadic C
|
|
alignment/packing
|
|
ownership across FFI
|
|
error propagation across ABI
|
|
```
|
|
|
|
## 29.5 Dynamic loading — V1 RÉSERVÉ / SDK
|
|
|
|
Le chargement dynamique runtime (`dlopen`/LoadLibrary-like) est prévu comme fonctionnalité système/SDK et probablement unsafe, mais n'est pas une primitive fondamentale du langage.
|
|
|
|
---
|