Book · Chapter 18

16. Backend C++ et interop

16. Backend C++ et interop

Vitte peut gĂ©nĂ©rer du C++ pour tirer parti d’outils existants. L’objectif n’est pas de « cacher » le C++, mais d’offrir une voie d’intĂ©gration claire.

Interop simple

Vous pouvez appeler une fonction externe. Vous pouvez lier une bibliothĂšque existante.

L’important est de documenter l’ABI et la convention d’appel.

PensĂ©e “frontiĂšre”

L’interop est une frontiĂšre : vous passez d’un monde Ă  l’autre. Assurez‑vous que chaque cĂŽtĂ© sait ce que l’autre attend.

StratĂ©gie d’intĂ©gration

Commencez par une fonction simple, documentĂ©e, et testĂ©e. Puis Ă©largissez progressivement. L’interop rĂ©ussie est une sĂ©rie d’étapes petites, jamais un “big bang”.

Erreurs courantes

Oublier la convention d’appel. MĂ©langer des types qui ne partagent pas la mĂȘme taille ou le mĂȘme alignement. Ne pas tester l’interface cĂŽtĂ© C/C++ et cĂŽtĂ© Vitte.

À retenir

InteropĂ©rer, c’est accepter deux mondes. Le contrat d’interface est ce qui Ă©vite les surprises.

Exemple guidé : appeler une fonction C

DĂ©finissez une fonction extern, documentez son ABI, puis appelez‑la. Testez avec un petit programme C sĂ©parĂ©.

Checklist interop

ABI documentée. Types alignés. Tests croisés Vitte/C.

Exercice : alignement

DĂ©finissez une structure cĂŽtĂ© C et cĂŽtĂ© Vitte. VĂ©rifiez que la taille et l’alignement correspondent. C’est une erreur classique quand on dĂ©bute en interop.

Code complet (API actuelle)

#[extern]


proc c_add(x: i32, y: i32) -> i32

entry main at core/app {
  let v = c_add(1, 2)
  return v
}

API idéale (future)

Un module std/ffi avec des helpers de conversion réduirait la friction.