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
- As opçÔes disponĂveis para o
rust_static_library
gn template - InformaçÔes sobre
#[no_mangle]
- InformaçÔes sobre
extern "C"
- InformaçÔes sobre o
--export-rust-project
do gn - Como instalar o rust-analyzer no VSCode
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
.