C++ til Rust-FFI-grænseflader
Eksponér C++-funktioner til brug via Rust FFI og i den modsatte retning
C++ til Rust-FFI-grænseflader er en gratis C++ Academy-lektion på CoddyKit. Dette er lektion 3 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i C++ Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. C++ Academy-kurset indeholder 4 lektioner i alt.
C++ og Rust
Rust og C++ er begge kompilerede sprog på lavt niveau — men de har forskellige ABI'er og inkompatible typesystemer. De udveksler typisk data via en C-ABI-bro.
Rust til C++: extern "C"
Eksportér Rust-funktioner med extern "C" og #[no_mangle].
// Rust
#[no_mangle]
pub extern "C" fn add(a: i32, b: i32) -> i32 {
a + b
}C++ kalder Rust
Deklarér Rust-funktionen i C++, og link med det statiske Rust-bibliotek.
// C++
extern "C" int add(int a, int b);
std::cout << add(2, 3);C++ til Rust
Den omvendte retning — Rust kalder C++. Indpak C++ i extern "C", og deklarér det i Rust.
// C++
extern "C" int multiply(int a, int b) {
return a * b;
}
// Rust
extern "C" {
fn multiply(a: i32, b: i32) -> i32;
}Linkning af statiske biblioteker
Byg Rust-cratet som en staticlib eller cdylib, og link med C++-bygningen.
# Cargo.toml
[lib]
crate-type = ["staticlib"]Bindgen og Cbindgen
Autogenerér FFI-deklarationer:
- bindgen — generér Rust-bindinger fra C++-headere
- cbindgen — generér C/C++-headere fra Rust-kode
cxx-cratet
cxx-cratet giver en sikrere interoperabilitet mellem C++ og Rust på højere niveau. Deklarér et fælles skema; cxx genererer bindinger på begge sider med stærk typning.
Ejerskab af hukommelse på tværs af FFI
Begge sprog har RAII, men forskellige ejerskabsmodeller. Send ejede data efter værdi, lånte data via en rå pointer — og dokumentér, hvem der frigiver hvad.
Strenge på tværs af FFI
Rusts String og C++'s std::string er inkompatible. Brug *const c_char (null-termineret) eller (*const u8, usize) (pointer + længde).
Undtagelser kontra panik
Rust-panik og C++-undtagelser krydser ikke FFI-grænsen sikkert. Fang C++-undtagelser ved grænsen, og brug std::panic::catch_unwind på Rust-siden.
Byggeintegration
Brug et metabyggesystem: CMake, der kalder Cargo, eller Cargo, der kalder CMake via et byggeskript (build.rs). Craten cxx håndterer almindelige mønstre.
Eksempler fra den virkelige verden
Mange produktionskodebaser blander C++ og Rust: Mozilla Firefox bruger Rust-komponenter i en C++-motor, Chromium eksperimenterer med Rust-moduler, og mange kryptobiblioteker tilbyder bindinger til begge sprog.
Hurtigt tjek
Hvilken Rust-attribut deaktiverer navnemangling, så C/C++ kan finde symbolet?
Opsamling
C++ og Rust integreres via C-ABI'en. Brug extern "C" og #[no_mangle]. Generér bindinger med bindgen og cbindgen, eller brug craten cxx til sikrere, typede broer. Håndtér ejerskab, strenge og panik omhyggeligt på tværs af grænsen.
Lær C++ med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 51
- Lektioner
- 203
Ofte stillede spørgsmål
Er lektionen “C++ til Rust-FFI-grænseflader” gratis?
Ja — alle 3 lektioner i læringssporet C++ Academy, inklusive “C++ til Rust-FFI-grænseflader”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. C++ Academy-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “C++ til Rust-FFI-grænseflader”?
Eksponér C++-funktioner til brug via Rust FFI og i den modsatte retning Du øver dig i C++ Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på C++ Academy?
Der kræves ingen tidligere erfaring. C++ Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 3 af 4.
Hvor lang tid tager lektionen “C++ til Rust-FFI-grænseflader”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne C++ Academy-lektion?
Ja. Alle C++ Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- Extern C og C-ABI'en
- Kald Python fra C++ via pybind11
- C++ til Rust-FFI-grænseflader
- Brug af SWIG til bindinger til flere sprog