Rust como pegamento: Integración con Python, C y otros lenguajes

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Rust como pegamento universal: por qué la integración con otros lenguajes es una superpotencia

\n\n

¿Alguna vez soñaste con escribir un módulo de alto rendimiento en Rust, pero no querías reescribir todo el proyecto en Python? ¿O quizás necesitas agregar gestión segura de memoria a una biblioteca C antigua? Bienvenido al mundo de la integración de Rust con otros lenguajes. Aquí Rust no actúa solo como un lenguaje independiente, sino como un poderoso "pegamento" que conecta ecosistemas.

\n\n

En pythonlib.ru a menudo hablamos de Python, pero hoy daremos un giro interesante. Rust no solo es velocidad y seguridad, sino también una flexibilidad increíble. Puede integrarse con Python a través de PyO3, llamar a funciones C mediante FFI, e incluso compilarse a WebAssembly para el navegador. En este artículo, analizaremos tres escenarios principales, mostraremos código real y daremos consejos prácticos. ¡Vamos allá!

\n\n

¿Por qué integrar Rust con otros lenguajes?

\n\n

Imagina: tienes un proyecto enorme en Python que se ralentiza debido a los bucles. Puedes reescribir la sección crítica en Rust, obtener un aumento de velocidad de 10 a 100 veces y no tocar el resto del código. O trabajas con una biblioteca C heredada y quieres envolverla en una interfaz Rust segura. Rust es ideal para esto gracias a la Foreign Function Interface (FFI).

\n\n

Razones principales para la integración:

\n
    \n
  • Rendimiento — Rust es más rápido que Python y JavaScript en tareas computacionales.
  • \n
  • Seguridad — Rust protege contra fugas de memoria y condiciones de carrera, algo crítico para C/C++.
  • \n
  • Ecosistema — obtienes acceso a las bibliotecas de Rust sin salir de tu lenguaje nativo.
  • \n
  • WebAssembly — el código Rust funciona en el navegador con velocidad casi nativa.
  • \n
\n\n

Integración de Rust con Python a través de PyO3

\n\n

PyO3 es la forma más popular de vincular Rust y Python. Escribes funciones en Rust, las compilas en un módulo nativo (.so o .pyd) y las importas como un módulo Python normal. ¿Suena mágico? En realidad, es simple.

\n\n

Instalación y configuración

\n

Para empezar, instala maturin — la herramienta para compilar extensiones Rust de Python:

\n
pip install maturin
\n

Crea un nuevo proyecto:

\n
maturin init --bindings pyo3
\n

Esto creará una estructura con los archivos Cargo.toml y lib.rs.

\n\n

Ejemplo: aceleración de cálculos

\n

Supongamos que necesitamos calcular rápidamente los números de Fibonacci. En Python puede ser lento, pero en Rust es ultrarrápido. Aquí está el código en src/lib.rs:

\n
use pyo3::prelude::*;\n\n#[pyfunction]\nfn fibonacci(n: u32) -> u64 {\n    match n {\n        0 => 0,\n        1 => 1,\n        _ => fibonacci(n - 1) + fibonacci(n - 2),\n    }\n}\n\n#[pymodule]\nfn rust_fib(_py: Python, m: &PyModule) -> PyResult<()> {\n    m.add_function(wrap_pyfunction!(fibonacci, m)?)?;\n    Ok(())\n}
\n

Compilamos el módulo:

\n
maturin develop
\n

Ahora en Python:

\n
import rust_fib\nprint(rust_fib.fibonacci(40))  # 102334155
\n

Compara la velocidad con Python puro: ¡la diferencia será de decenas de veces! Este es un ejemplo perfecto de integración de Rust con Python para optimización.

\n\n

Transferencia de datos complejos

\n

PyO3 no solo admite números, sino también listas, diccionarios e incluso arrays de numpy. Por ejemplo, puedes pasar una lista y procesarla en Rust:

\n
#[pyfunction]\nfn sum_list(numbers: Vec<i32>) -> i32 {\n    numbers.iter().sum()\n}
\n

En Python:

\n
print(rust_fib.sum_list([1, 2, 3, 4]))  # 10
\n

Esto abre enormes posibilidades para la integración de Rust con Python en ciencia de datos y desarrollo web.

\n\n

Rust y C: FFI clásico

\n\n

Rust fue creado como un reemplazo de C/C++, por lo que el FFI Rust es su característica nativa.

Blogs

Book Recommendations