C++ Academy · Lektion

C++ för Rust-FFI-gränser

Exponera C++-funktioner för användning via Rust FFI och i motsatt riktning

Lektion 3 av 414 steg

C++ för Rust-FFI-gränser är en gratis lektion i C++ Academy på CoddyKit. Detta är lektion 3 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för C++ Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i C++ Academy innehåller totalt 4 lektioner.

C++ och Rust

Rust och C++ är båda kompilerade lågnivåspråk — men de har olika ABI:er och inkompatibla typsystem. De samverkar vanligtvis via en brygga med C-ABI.

Rust till C++: extern "C"

Exportera Rust-funktioner med extern "C" och #[no_mangle].

// Rust
#[no_mangle]
pub extern "C" fn add(a: i32, b: i32) -> i32 {
    a + b
}

C++ anropar Rust

Deklarera Rust-funktionen i C++ och länka med Rusts statiska bibliotek.

// C++
extern "C" int add(int a, int b);

std::cout << add(2, 3);

C++ till Rust

Omvänd riktning — Rust anropar C++. Omslut C++ med extern "C" och deklarera 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;
}

Länka statiska bibliotek

Bygg Rust-cratet som en staticlib eller cdylib och länka det med C++-bygget.

# Cargo.toml
[lib]
crate-type = ["staticlib"]

bindgen och cbindgen

Autogenerera FFI-deklarationer:

  • bindgen — genererar Rust-bindningar från C++-headers
  • cbindgen — genererar C/C++-headers från Rust-kod

cxx-cratet

cxx-cratet tillhandahåller säkrare interoperabilitet på högre nivå mellan C++ och Rust. Deklarera ett gemensamt schema; cxx genererar typsäkra bindningar på båda sidor.

Minnesägarskap över FFI

Båda språken har RAII, men olika ägarskapsmodeller. Skicka ägd data som värde och lånad data som en råpekare — och dokumentera vem som frigör vad.

Strängar över FFI

Rusts String och C++ std::string är inkompatibla. Använd *const c_char (nollterminerad) eller (*const u8, usize) (pekare + längd).

Undantag kontra panic

Rust-panic och C++-undantag passerar inte FFI-gränsen på ett säkert sätt. Fånga C++-undantag vid gränsen och använd std::panic::catch_unwind på Rust-sidan.

Byggintegrering

Använd ett metabyggsystem: CMake som anropar Cargo, eller Cargo som anropar CMake via ett byggskript (build.rs). Crate-paketet cxx hanterar vanliga mönster.

Verkliga exempel

Många produktionskodbaser kombinerar C++ och Rust: Mozilla Firefox använder Rust-komponenter i en C++-motor, Chromium experimenterar med Rust-moduler och många kryptobibliotek tillhandahåller bindningar för båda språken.

Snabbtest

Vilket Rust-attribut stänger av namnmangling så att C/C++ kan hitta symbolen?

Sammanfattning

C++ och Rust samverkar via C ABI. Använd extern "C" och #[no_mangle]. Generera bindningar med bindgen och cbindgen, eller använd cxx-crate för säkrare typade bryggor. Hantera ägarskap, strängar och panic noggrant över gränsen.

Gratis att börja

Lär dig C++ med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
51
Lektioner
203

Vanliga frågor

Är lektionen ”C++ för Rust-FFI-gränser” gratis?

Ja – du kan läsa vilka 3 lektioner som helst i lärvägen C++ Academy, inklusive ”C++ för Rust-FFI-gränser”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i C++ Academy innehåller totalt 4 lektioner.

Vad lär jag mig i ”C++ för Rust-FFI-gränser”?

Exponera C++-funktioner för användning via Rust FFI och i motsatt riktning Ni övar på C++ Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig C++ Academy?

Du behöver inga förkunskaper. Utbildningen i C++ Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 3 av 4.

Hur lång tid tar lektionen ”C++ för Rust-FFI-gränser”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här C++ Academy-lektionen?

Ja. Varje C++ Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Extern C och C-ABI
  2. Anropa Python från C++ via pybind11
  3. C++ för Rust-FFI-gränser
  4. Använda SWIG för bindningar till flera språk
← Tillbaka till C++ Academy