| Filename | Latest commit message | Latest commit date |
|---|---|---|
| .. | ||
| mxos-identity-curp | ||
| .gitignore | ||
| README.md | ||
| test.php | ||
| test.py | ||
| test.rb | ||
📦 Manual de Wrappers
Este directorio contiene ejemplos prácticos de cómo cargar funciones escritas en Rust desde otros lenguajes de programación mediante el uso de FFI (Foreign Function Interface).
graph TD
A["MxOS-Identidad"]
subgraph "Wrapper Lenguaje"
B["Python"]
C["Ruby"]
D["Node.js"]
E["PHP wrapper"]
F["Go wrapper"]
G[".NET wrapper"]
H["Java wrapper"]
I["Swift wrapper"]
end
🎯 Objetivo
El objetivo de este manual/carpeta es acercar a personas y comunidades que no necesariamente programan en Rust a la posibilidad de integrar librerías escritas en lenguaje Rusto en sus entornos habituales, como PHP, Nodejs, Perl, Python, Ruby, etc...
Mostrar cómo utilizar funciones definidas en una librería compilada en Rust a través de FFI desde lenguajes de aplicación mas populares. No necesitas ser un expert@ en Rust para beneficiarte de estas integraciones.
Estos ejemplos buscan ser una guía clara y mínima para que cualquier desarrollador pueda:
- Cargar funciones Rust compiladas como
.so(Linux) - Llamarlas desde su lenguaje de preferencia
- Comprender los principios básicos de interoperabilidad entre lenguajes
🧪 Estructura
manual_wrappers/
├── mxos-identity-curp/ # Crate en Rust que expone funciones vía FFI
│ ├── src/lib.rs # Define las funciones disponibles (e.g. generar\_curp)
│ └── target/release/lib\*.so # Archivo compilado generado por `cargo build --release`
├── test.php # Ejemplo de uso desde PHP
├── test.py # Ejemplo de uso desde Python
└── test.rb # Ejemplo de uso desde Ruby
🧵 ¿Qué es FFI?
FFI (Foreign Function Interface) es un mecanismo que permite a un lenguaje de programación llamar funciones escritas en otro lenguaje.
En nuestro caso:
- 📦 Compilamos el código Rust como una librería compartida (
.soen Linux,.dllen Windows,.dyliben macOS). - 📲 Usamos mecanismos de FFI en otros lenguajes para importar esa librería y llamar sus funciones como si fueran locales.
Esto permite, por ejemplo:
- Ejecutar funciones de alto rendimiento escritas en Rust desde aplicaciones Python o PHP.
- Reutilizar lógica compartida en múltiples entornos sin reescribirla.
- Separar la lógica crítica del sistema en un lenguaje más seguro y rápido.
Librerías compartidas.
Cuando compilamos nuestro código en Rust (o C) libería compartida, esta cambia su extructura interna y extensión en función del Sistema operativo, la siguiente tabla ilustra esto:
| Sistema Operativo | Extensión de librerías dinámicas |
|---|---|
| Linux | .so (Shared Object) |
| Windows | .dll (Dynamic Link Library) |
| macOS | .dylib (Dynamic Library) |
🛠️ Requisitos
- Tener Rust instalado (
https://rustup.rs) - Compilar la librería con:
cd mxos-identity-curp
cargo build --release
Esto generará el archivo libmxos_identity_curp.so dentro de target/release/.
🧑🏫 Uso desde otros lenguajes
Cada uno de los archivos test.* muestra cómo importar y usar la función generar_curp(...) desde:
📚 Recursos recomendados
En Español
- Qué es FFI y cómo usarlo con Rust
- Interoperabilidad de Rust con otros lenguajes (foro Rust Latam)
- Curso Rust - FFI básico (YouTube)
In English
🤝 Contribuciones
Si deseas agregar ejemplos en otros lenguajes como:
- Go
- Node.js
- Java
- .NET
¡Eres bienvenid@! Solo asegúrate de mantener la estructura clara y documentar el proceso de integración.
MxOS-Identity 🛡️ — Estamos construyendo herramientas para un futuro digital más justo y transparente para México 🇲🇽