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

Speaker Notes

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.