0Pricing
C++ Academy · Lección

C++ para fronteras FFI con Rust

Exponga funciones C++ para que Rust las consuma mediante FFI y realice también el proceso inverso.

C++ para fronteras FFI con Rust es una lección gratuita de C++ Academy en CoddyKit. Esta es la lección 3 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de C++ Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de C++ Academy incluye 4 lecciones en total.

C++ y Rust

Rust y C++ son lenguajes compilados de bajo nivel, pero tienen ABI diferentes y sistemas de tipos incompatibles. Normalmente interoperan mediante un puente basado en la ABI de C.

De Rust a C++: extern "C"

Exporte funciones de Rust con extern "C" y #[no_mangle].

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

C++ llama a Rust

Declare la función de Rust en C++ y enlace con la biblioteca estática de Rust.

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

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

De C++ a Rust

En la dirección inversa, Rust llama a C++. Envuelva C++ en extern "C" y declare la función en Rust.

// C++
extern "C" int multiply(int a, int b) {
    return a * b;
}

// Rust
extern "C" {
    fn multiply(a: i32, b: i32) -> i32;
}

Enlazar bibliotecas estáticas

Compile el crate de Rust como staticlib o cdylib y enlácelo con la compilación de C++.

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

Bindgen y Cbindgen

Genere automáticamente declaraciones FFI:

  • bindgen: genera bindings de Rust a partir de cabeceras de C++
  • cbindgen: genera cabeceras de C/C++ a partir de código Rust

Crate cxx

El crate cxx proporciona una interoperabilidad entre C++ y Rust más segura y de mayor nivel. Declare un esquema compartido; cxx genera bindings en ambos lados con tipado fuerte.

Propiedad de la memoria a través de FFI

Ambos lenguajes tienen RAII, pero sus modelos de propiedad son diferentes. Pase los datos propios por valor y los datos prestados mediante un puntero crudo; documente quién libera cada elemento.

Cadenas a través de FFI

Rust String y C++ std::string son incompatibles. Utilice *const c_char (terminada en nulo) o (*const u8, usize) (puntero más longitud).

Excepciones frente a panic

Los panic de Rust y las excepciones de C++ no atraviesan FFI de forma segura. Capture las excepciones de C++ en la frontera y use std::panic::catch_unwind en el lado de Rust.

Integración de la compilación

Use un sistema de metacompilación: CMake llamando a Cargo, o Cargo llamando a CMake mediante un script de compilación (build.rs). El crate cxx gestiona los patrones habituales.

Ejemplos del mundo real

Muchos proyectos reales combinan C++ y Rust: Mozilla Firefox utiliza componentes de Rust dentro de un motor de C++; Chromium experimenta con módulos de Rust; muchas bibliotecas criptográficas ofrecen bindings para ambos lenguajes.

Comprobación rápida

¿Qué atributo de Rust desactiva la modificación de nombres para que C/C++ pueda encontrar el símbolo?

Resumen

La interoperabilidad entre C++ y Rust se realiza mediante la ABI de C. Use extern "C" y #[no_mangle]. Genere bindings con bindgen y cbindgen, o use el crate cxx para disponer de puentes tipados más seguros. Gestione con cuidado la propiedad, las cadenas y los panic a ambos lados de la frontera.

Preguntas frecuentes

¿La lección «C++ para fronteras FFI con Rust» es gratis?

Sí — el texto completo de «C++ para fronteras FFI con Rust» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de C++ Academy, actualiza a CoddyKit PRO. El curso de C++ Academy incluye 4 lecciones en total.

¿Qué aprenderé en «C++ para fronteras FFI con Rust»?

Exponga funciones C++ para que Rust las consuma mediante FFI y realice también el proceso inverso. Practicas C++ Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar C++ Academy?

No se requiere experiencia previa. C++ Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 4.

¿Cuánto tiempo toma la lección «C++ para fronteras FFI con Rust»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de C++ Academy?

Sí. Cada lección de C++ Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. extern C y la ABI de C
  2. Llamar a Python desde C++ mediante pybind11
  3. C++ para fronteras FFI con Rust
  4. Uso de SWIG para bindings multilingües
← Volver a C++ Academy