C++ per i confini FFI con Rust
Esponga funzioni C++ per l'utilizzo tramite FFI da Rust e nella direzione inversa
C++ per i confini FFI con Rust è una lezione C++ Academy gratuita su CoddyKit. Questa è la lezione 3 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento C++ Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso C++ Academy include 4 lezioni in totale.
C++ e Rust
Rust e C++ sono entrambi linguaggi compilati di basso livello, ma hanno ABI diverse e sistemi di tipi incompatibili. In genere interoperano tramite un bridge basato sull'ABI del C.
Da Rust a C++: extern "C"
Esportate le funzioni Rust con extern "C" e #[no_mangle].
// Rust
#[no_mangle]
pub extern "C" fn add(a: i32, b: i32) -> i32 {
a + b
}Il C++ chiama Rust
Dichiarate la funzione Rust in C++ e collegatevi alla libreria statica Rust.
// C++
extern "C" int add(int a, int b);
std::cout << add(2, 3);Dal C++ a Rust
Direzione inversa: Rust chiama il C++. Racchiudete il C++ in extern "C" e dichiaratelo in Rust.
// C++
extern "C" int multiply(int a, int b) {
return a * b;
}
// Rust
extern "C" {
fn multiply(a: i32, b: i32) -> i32;
}Collegare librerie statiche
Create il crate Rust come staticlib o cdylib e collegatelo alla build C++.
# Cargo.toml
[lib]
crate-type = ["staticlib"]Bindgen e Cbindgen
Generate automaticamente le dichiarazioni FFI:
- bindgen — genera binding Rust dagli header C++
- cbindgen — genera header C/C++ dal codice Rust
Crate cxx
Il crate cxx fornisce un'interoperabilità C++/Rust più sicura e di livello più alto. Dichiarate uno schema condiviso; cxx genera binding su entrambi i lati con tipizzazione forte.
Proprietà della memoria attraverso la FFI
Entrambi i linguaggi hanno RAII, ma modelli di proprietà diversi. Passate i dati di cui trasferire la proprietà per valore e quelli presi in prestito tramite puntatori raw, quindi documentate chi deve deallocare ogni risorsa.
Stringhe attraverso la FFI
String di Rust e std::string del C++ sono incompatibili. Utilizzate *const c_char (con terminazione null) oppure (*const u8, usize) (puntatore + lunghezza).
Eccezioni e panic
I panic di Rust e le eccezioni C++ non attraversano l'FFI in modo sicuro. Intercetti le eccezioni C++ al confine e utilizzi std::panic::catch_unwind sul lato Rust.
Integrazione della build
Utilizzi un sistema di meta-build: CMake che richiama Cargo oppure Cargo che richiama CMake tramite uno script di build (build.rs). Il crate cxx gestisce i pattern più comuni.
Esempi reali
Molti codebase di produzione combinano C++ e Rust: Mozilla Firefox utilizza componenti Rust all'interno di un motore C++; Chromium sta sperimentando moduli Rust; molte librerie crittografiche forniscono binding per entrambi i linguaggi.
Verifica rapida
Quale attributo Rust disabilita il name mangling affinché C/C++ possa trovare il simbolo?
Riepilogo
L'interoperabilità tra C++ e Rust avviene tramite l'ABI C. Utilizzi extern "C" e #[no_mangle]. Generi i binding con bindgen e cbindgen oppure utilizzi il crate cxx per bridge tipizzati più sicuri. Gestisca con attenzione ownership, stringhe e panic oltre il confine.
Impara C++ con un tutor IA — gratis
Scrivi ed esegui vero codice nel tuo browser, ricevi aiuto istantaneo da un tutor IA disponibile 24/7, e riprendi da dove hai lasciato sul web o nell'app.
- Corsi
- 51
- Lezioni
- 203
Domande Frequenti
La lezione «C++ per i confini FFI con Rust» è gratuita?
Sì — il testo completo di «C++ per i confini FFI con Rust» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso C++ Academy, passa a CoddyKit PRO. Il corso C++ Academy include 4 lezioni in totale.
Cosa imparerò in «C++ per i confini FFI con Rust»?
Esponga funzioni C++ per l'utilizzo tramite FFI da Rust e nella direzione inversa Eserciti C++ Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare C++ Academy?
Non è richiesta alcuna esperienza precedente. C++ Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 4.
Quanto tempo richiede la lezione «C++ per i confini FFI con Rust»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione C++ Academy?
Sì. Ogni lezione C++ Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- extern C e ABI C
- Chiamare Python da C++ con pybind11
- C++ per i confini FFI con Rust
- Usare SWIG per binding multilingua