Ejercicio de reglas de compilación
En tu compilación de Chromium, añade un nuevo elemento de destino de Rust a //ui/base/build.gn
que contenga lo siguiente:
#![allow(unused)] fn main() { #[no_mangle] pub extern "C" fn hello_from_rust() { println!("¡Saludos de parte Rust!") } }
Important: note that no_mangle
here is considered a type of unsafety by the Rust compiler, so you'll need to allow unsafe code in your gn
target.
Añade este nuevo elemento de destino de Rust como una dependencia de //ui/base:base
. Declara esta función en la parte superior de ui/base/resource/resource_bundle.cc
(más adelante veremos cómo se puede automatizar mediante herramientas de generación de enlaces):
extern "C" void hello_from_rust();
Llama a esta función desde algún lugar de ui/base/resource/resource_bundle.cc
. Recomendamos hacerlo en la parte superior de ResourceBundle::RSMangleLocalizedString
. Compila y ejecuta Chromium y asegúrate de que se imprima "¡Rust te manda un saludo!" muchas veces.
Si usas VSCode, ahora debes configurar Rust para que funcione correctamente en VSCode. Nos será útil en ejercicios posteriores. Si lo has completado correctamente, podrás hacer clic con el botón derecho y pulsar "Ir a la definición" en println!
.
Dónde obtener ayuda
- Opciones disponibles de la plantilla gn
rust_static_library
- Información sobre
#[no_mangle]
- Información sobre
extern "C"
- Información sobre el interruptor
--export-rust-project
de gn - Cómo instalar rust-analyzer en VSCode
Este ejemplo no es habitual porque se reduce al lenguaje de interoperabilidad con el mínimo común denominador, C. Tanto C++ como Rust pueden declarar y llamar de forma nativa funciones ABI de C. Más adelante, conectaremos C++ directamente con Rust.
allow_unsafe = true
es obligatorio porque #[no_mangle]
podría permitir que Rust genere dos funciones con el mismo nombre, y Rust ya no puede asegurar que se llame a la correcta.
Si necesitas un ejecutable puro de Rust, también puedes hacerlo con la plantilla gn rust_executable
.