Exercício de regras de compilação

Em sua compilação do Chromium, adicione um novo módulo Rust a //ui/base/BUILD.gn contendo:

#![allow(unused)]
fn main() {
#[no_mangle]
pub extern "C" fn hello_from_rust() {
    println!("OlĂĄ do Rust!")
}
}

Importante: observe que no_mangle aqui Ă© considerado um tipo de insegurança pelo compilador Rust, portanto, vocĂȘ precisarĂĄ permitir cĂłdigo inseguro em seu alvo gn.

Adicione este novo mĂłdulo Rust como uma dependĂȘncia de //ui/base:base. Declare esta função no topo de ui/base/resource/resource_bundle.cc (mais tarde, veremos como isso pode ser automatizado por ferramentas de geração de bindings):

extern "C" void hello_from_rust();

Chame esta função de algum lugar em ui/base/resource/resource_bundle.cc - sugerimos o topo de ResourceBundle::MaybeMangleLocalizedString. Compile e execute o Chromium e verifique se “Hello from Rust!” Ă© impresso muitas vezes.

Se vocĂȘ usar o VSCode, agora configure o Rust para funcionar bem no VSCode. Isto serĂĄ Ăștil nos exercĂ­cios subsequentes. Se vocĂȘ tiver sucesso, poderĂĄ usar o botĂŁo direito do mouse em “Ir para definição” em println!.

Onde encontrar ajuda

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

Este exemplo é incomum porque se resume à linguagem de interoperabilidade de menor denominador comum, C. Tanto C++ quanto Rust podem declarar e chamar nativamente funçÔes C ABI. Mais tarde no curso, conectaremos C++ diretamente ao Rust.

allow_unsafe = true é necessårio aqui porque #[no_mangle] pode permitir que o Rust gere duas funçÔes com o mesmo nome, e o Rust não pode mais garantir que a correta seja chamada.

Se vocĂȘ precisar de um executĂĄvel Rust puro, tambĂ©m poderĂĄ fazer isso usando o template gn rust_executable.