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

It's really important that students get this running, because future exercises will build on it.

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.