C++ Academy · Lezione

C++ per i confini FFI con Rust

Esponga funzioni C++ per l'utilizzo tramite FFI da Rust e nella direzione inversa

Lezione 3 di 414 passaggi

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.

Gratis per iniziare

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

  1. extern C e ABI C
  2. Chiamare Python da C++ con pybind11
  3. C++ per i confini FFI con Rust
  4. Usare SWIG per binding multilingua
← Torna a C++ Academy