C++ pour les frontières FFI de Rust
Exposer des fonctions C++ pour leur utilisation via la FFI de Rust, et inversement
C++ pour les frontières FFI de Rust est une leçon C++ Academy gratuite sur CoddyKit. Ceci est la leçon 3 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage C++ Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours C++ Academy comprend 4 leçons au total.
C++ et Rust
Rust et C++ sont tous deux des langages compilés de bas niveau, mais ils ont des ABI différentes et des systèmes de types incompatibles. Ils interagissent généralement via une passerelle utilisant l'ABI de C.
De Rust vers C++ : extern "C"
Exportez les fonctions Rust avec extern "C" et #[no_mangle].
// Rust
#[no_mangle]
pub extern "C" fn add(a: i32, b: i32) -> i32 {
a + b
}Appeler Rust depuis C++
Déclarez la fonction Rust en C++ et liez-la à la bibliothèque statique Rust.
// C++
extern "C" int add(int a, int b);
std::cout << add(2, 3);De C++ vers Rust
Dans l'autre sens, Rust appelle C++. Entourez le C++ de extern "C" et déclarez-le en Rust.
// C++
extern "C" int multiply(int a, int b) {
return a * b;
}
// Rust
extern "C" {
fn multiply(a: i32, b: i32) -> i32;
}Édition de liens avec des bibliothèques statiques
Construisez le crate Rust comme une staticlib ou une cdylib, puis liez-le à la construction C++.
# Cargo.toml
[lib]
crate-type = ["staticlib"]Bindgen et Cbindgen
Générez automatiquement les déclarations FFI :
- bindgen — génère des liaisons Rust à partir des fichiers d'en-tête C++
- cbindgen — génère des fichiers d'en-tête C/C++ à partir du code Rust
Bibliothèque cxx
La bibliothèque cxx fournit une interopérabilité C++/Rust plus sûre et de plus haut niveau. Déclarez un schéma partagé ; cxx génère des liaisons des deux côtés avec un typage fort.
Propriété de la mémoire à travers la FFI
Les deux langages utilisent RAII, mais leurs modèles de propriété sont différents. Transmettez les données dont vous transférez la propriété par valeur, les données empruntées par pointeur brut, et documentez qui libère quoi.
Chaînes de caractères à travers la FFI
Rust String et C++ std::string sont incompatibles. Utilisez *const c_char (terminée par un caractère nul) ou (*const u8, usize) (pointeur + longueur).
Exceptions ou paniques
Les paniques de Rust et les exceptions C++ ne franchissent pas la frontière FFI en toute sécurité. Interceptez les exceptions C++ à la frontière et utilisez std::panic::catch_unwind du côté Rust.
Intégration de la compilation
Utilisez un système de méta-compilation : CMake qui appelle Cargo, ou Cargo qui appelle CMake via un script de compilation (build.rs). Le paquet cxx prend en charge les modèles courants.
Exemples concrets
De nombreux codes en production combinent C++ et Rust : Mozilla Firefox utilise des composants Rust au sein d'un moteur C++ ; Chromium expérimente des modules Rust ; de nombreuses bibliothèques cryptographiques fournissent les deux types de liaisons.
Vérification rapide
Quel attribut Rust désactive la décoration des noms afin que C/C++ puisse trouver le symbole ?
Récapitulatif
L'interopérabilité entre C++ et Rust passe par l'ABI C. Utilisez extern "C" et #[no_mangle]. Générez les liaisons avec bindgen et cbindgen, ou utilisez le paquet cxx pour des ponts typés plus sûrs. Gérez soigneusement la propriété, les chaînes et les paniques de part et d'autre de la frontière.
Questions Fréquemment Posées
La leçon « C++ pour les frontières FFI de Rust » est-elle gratuite ?
Oui — le texte complet de « C++ pour les frontières FFI de Rust » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours C++ Academy, passe à CoddyKit PRO. Le cours C++ Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « C++ pour les frontières FFI de Rust » ?
Exposer des fonctions C++ pour leur utilisation via la FFI de Rust, et inversement Tu pratiques C++ Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer C++ Academy ?
Aucune expérience préalable n'est requise. C++ Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 3 sur 4.
Combien de temps prend la leçon « C++ pour les frontières FFI de Rust » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon C++ Academy ?
Oui. Chaque leçon C++ Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Extern C et ABI du C
- Appeler Python depuis C++ avec pybind11
- C++ pour les frontières FFI de Rust
- Utiliser SWIG pour des liaisons multilingues