Comparando os Ecossistemas do Chromium e do Cargo
A comunidade Rust normalmente usa cargo
e bibliotecas de crates.io. O Chromium Ă© compilado usando gn
e ninja
e um conjunto de dependĂȘncias selecionadas.
Ao escrever cĂłdigo em Rust, suas escolhas sĂŁo:
- Use
gn
eninja
com a ajuda dos templates de//build/rust/*.gni
(por exemplo,rust_static_library
que veremos mais adiante). Isso usa o conjunto de ferramentas e crates auditados do Chromium. - Use
cargo
, mas restrinja-se ao conjunto de ferramentas e crates auditados do Chromium - Use
cargo
, confiando em um conjunto de ferramentas e/ou crates baixados da internet
Daqui em diante, estaremos focando em gn
e ninja
, porque Ă© assim que o cĂłdigo Rust pode ser compilado no navegador Chromium. Ao mesmo tempo, o Cargo Ă© uma parte importante do ecossistema Rust e vocĂȘ deve mantĂȘ-lo em sua caixa de ferramentas.
Mini exercĂcio
Dividam-se em pequenos grupos e:
- Faça um brainstorm de cenårios em que o
cargo
pode oferecer uma vantagem e avalie o perfil de risco desses cenĂĄrios. - Discuta quais ferramentas, bibliotecas e grupos de pessoas precisam ser confiĂĄveis ao usar
gn
eninja
,cargo
offline, etc.
Peça aos alunos que evitem olhar as notas do apresentador antes de completar o exercĂcio. Supondo que as pessoas que fazem o curso estejam fisicamente juntas, peça-lhes que discutam em pequenos grupos de 3-4 pessoas.
Notas/dicas relacionadas Ă primeira parte do exercĂcio ("cenĂĄrios em que o Cargo pode oferecer uma vantagem"):
-
Ă fantĂĄstico que, ao escrever uma ferramenta ou prototipar uma parte do Chromium, tenha-se acesso ao rico ecossistema de bibliotecas do crates.io. HĂĄ um crate para quase tudo e eles geralmente sĂŁo bastante agradĂĄveis de usar. (
clap
para anĂĄlise de linha de comando,serde
para serialização/desserialização para/de vårios formatos,itertools
para trabalhar com iteradores, etc.).- O
cargo
torna fĂĄcil experimentar uma biblioteca (basta adicionar uma Ășnica linha aoCargo.toml
e começar a escrever o código) - Pode valer a pena comparar como o CPAN ajudou a tornar o
perl
uma escolha popular. Ou comparar compython
+pip
.
- O
-
A experiĂȘncia de desenvolvimento Ă© tornada realmente agradĂĄvel nĂŁo apenas pelas ferramentas principais do Rust (por exemplo, usando
rustup
para alternar para uma versĂŁo diferente dorustc
ao testar um crate que precisa funcionar no nightly, eståvel atual e eståvel antigo), mas também por um ecossistema de ferramentas de terceiros (por exemplo, a Mozilla fornececargo vet
para agilizar e compartilhar auditorias de segurança; o cratecriterion
fornece uma maneira simplificada de executar benchmarks).- O
cargo
torna fĂĄcil adicionar uma ferramenta viacargo install --locked cargo-vet
. - Pode valer a pena comparar com as extensÔes do Chrome ou as extensÔes do VScode.
- O
-
Exemplos amplos e genéricos de projetos em que o
cargo
pode ser a escolha certa:- Talvez surpreendentemente, o Rust estĂĄ se tornando cada vez mais popular na indĂșstria para escrever ferramentas de linha de comando. A amplitude e a ergonomia das bibliotecas sĂŁo comparĂĄveis ao Python, enquanto sĂŁo mais robustas (graças ao rico sistema de tipos) e executam mais rĂĄpido (como uma linguagem compilada, em vez de interpretada).
- Participar do ecossistema Rust requer o uso de ferramentas padrão do Rust, como o Cargo. Bibliotecas que desejam obter contribuiçÔes externas e desejam ser usadas fora do Chromium (por exemplo, em ambientes de compilação Bazel ou Android/Soong) devem usar o Cargo.
-
Exemplos de projetos relacionados ao Chromium que sĂŁo baseados no
cargo
:serde_json_lenient
(experimentado em outras partes do Google, o que resultou em PRs com melhorias de desempenho)- Bibliotecas Fontations como
font-types
- Ferramenta
gnrt
(vamos conhecĂȘ-la mais adiante no curso) que depende doclap
para anĂĄlise de linha de comando e dotoml
para arquivos de configuração.- Aviso: um motivo Ășnico para usar o
cargo
foi a indisponibilidade dogn
ao compilar e inicializar a biblioteca padrĂŁo do Rust ao compilar o conjunto de ferramentas Rust.) run_gnrt.py
usa a cĂłpia docargo
e dorustc
do Chromium.gnrt
depende de bibliotecas de terceiros baixadas da internet, masrun_gnrt.py
pede aocargo
que apenas o conteĂșdo--locked
seja permitido viaCargo.lock
.)
- Aviso: um motivo Ășnico para usar o
Os alunos podem identificar os seguintes itens como sendo implicitamente ou explicitamente confiĂĄveis:
rustc
(o compilador Rust), que por sua vez depende das bibliotecas LLVM, do compilador Clang, das fontesrustc
(buscadas no GitHub, revisadas pela equipe do compilador Rust), compilador Rust binårio baixado para inicializaçãorustup
(pode valer a pena observar que orustup
é desenvolvido sob a supervisão da organização https://github.com/rust-lang/ - o mesmo que orustc
)cargo
,rustfmt
, etc.- Diversas infraestruturas internas (robĂŽs que compilam
rustc
, sistema para distribuir o conjunto de ferramentas pré-compilado para engenheiros do Chromium, etc.) - Ferramentas do Cargo como
cargo audit
,cargo vet
, etc. - Bibliotecas Rust hospedadas em
//third_party/rust
(auditadas por security@chromium.org) - Outras bibliotecas Rust (algumas de nicho, algumas bastante populares e comumente usadas)