C++ para fronteiras FFI de Rust
Exponha funções C++ para utilização através da FFI de Rust e no sentido inverso
C++ para fronteiras FFI de Rust é uma aula grátis de C++ Academy no CoddyKit. Esta é a aula 3 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de C++ Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de C++ Academy inclui 4 aulas no total.
C++ e Rust
Rust e C++ são linguagens compiladas de baixo nível — mas têm ABIs diferentes e sistemas de tipos incompatíveis. Normalmente, interoperam por meio de uma ponte de ABI C.
De Rust para C++: extern "C"
Exporte funções Rust com extern "C" e #[no_mangle].
// Rust
#[no_mangle]
pub extern "C" fn add(a: i32, b: i32) -> i32 {
a + b
}C++ chamando Rust
Declare a função Rust em C++ e vincule-a à biblioteca estática Rust.
// C++
extern "C" int add(int a, int b);
std::cout << add(2, 3);De C++ para Rust
No sentido inverso — Rust chama C++. Envolva o C++ em extern "C" e declare-o em Rust.
// C++
extern "C" int multiply(int a, int b) {
return a * b;
}
// Rust
extern "C" {
fn multiply(a: i32, b: i32) -> i32;
}Vinculação de bibliotecas estáticas
Compile o crate Rust como staticlib ou cdylib e vincule-o à compilação C++.
# Cargo.toml
[lib]
crate-type = ["staticlib"]Bindgen e Cbindgen
Gere declarações FFI automaticamente:
- bindgen — gera vinculações Rust a partir de cabeçalhos C++
- cbindgen — gera cabeçalhos C/C++ a partir de código Rust
Crate cxx
O crate cxx oferece interoperabilidade C++/Rust mais segura e de nível mais alto. Declare um esquema compartilhado; o cxx gera vinculações em ambos os lados com tipagem forte.
Propriedade da memória através da FFI
Ambas as linguagens têm RAII, mas modelos de propriedade diferentes. Passe dados próprios por valor e dados emprestados por ponteiro bruto — e documente quem libera cada recurso.
Cadeias de caracteres através da FFI
String do Rust e std::string do C++ são incompatíveis. Use *const c_char (terminada em nulo) ou (*const u8, usize) (ponteiro + comprimento).
Exceções vs. pânicos
Os pânicos do Rust e as exceções do C++ não atravessam a FFI com segurança. Capture as exceções do C++ na fronteira; use std::panic::catch_unwind no lado do Rust.
Integração da compilação
Use um sistema de meta-compilação: o CMake chamando o Cargo ou o Cargo chamando o CMake por meio de um script de compilação (build.rs). A crate cxx lida com padrões comuns.
Exemplos do mundo real
Muitas bases de código de produção combinam C++ e Rust: o Mozilla Firefox usa componentes Rust dentro de um mecanismo C++; o Chromium experimenta com módulos Rust; muitas bibliotecas de criptografia fornecem ambas as ligações.
Verificação rápida
Qual atributo do Rust desativa a decoração de nomes para que C/C++ possa encontrar o símbolo?
Recapitulação
A interoperabilidade entre C++ e Rust ocorre por meio da ABI C. Use extern "C" e #[no_mangle]. Gere ligações com bindgen e cbindgen ou use a crate cxx para obter pontes tipadas mais seguras. Gerencie cuidadosamente a propriedade, as strings e os pânicos ao atravessar a fronteira.
Perguntas Frequentes
A aula “C++ para fronteiras FFI de Rust” é grátis?
Sim — o texto completo de “C++ para fronteiras FFI de Rust” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de C++ Academy, atualize para CoddyKit PRO. O curso de C++ Academy inclui 4 aulas no total.
O que vou aprender em “C++ para fronteiras FFI de Rust”?
Exponha funções C++ para utilização através da FFI de Rust e no sentido inverso Você pratica C++ Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar C++ Academy?
Nenhuma experiência prévia é necessária. C++ Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 4.
Quanto tempo leva a aula “C++ para fronteiras FFI de Rust”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de C++ Academy?
Sim. Cada aula de C++ Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- extern C e a ABI de C
- Chamar Python a partir de C++ com pybind11
- C++ para fronteiras FFI de Rust
- Usar SWIG para ligações entre várias linguagens