# 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. ---