Juntando Tudo — Exercício

Neste exercĂ­cio, vocĂȘ vai adicionar um novo recurso completo do Chromium, juntando tudo o que vocĂȘ jĂĄ aprendeu.

O Resumo da GerĂȘncia de Produto

Uma comunidade de duendes foi descoberta vivendo em uma floresta tropical remota. É importante que entreguemos o Chromium para Duendes a eles o mais rápido possível.

O requisito Ă© traduzir todas as strings de IU do Chromium para o idioma dos Duendes.

NĂŁo hĂĄ tempo para esperar por traduçÔes adequadas, mas, felizmente, o idioma dos duendes Ă© muito prĂłximo do inglĂȘs, e descobriu-se que hĂĄ um crate Rust que faz a tradução.

Na verdade, vocĂȘ jĂĄ importou esse crate no exercĂ­cio anterior.

(Obviamente, as traduçÔes reais do Chrome exigem cuidado e diligĂȘncia incrĂ­veis. NĂŁo lance isso!)

Passos

Modifique ResourceBundle::MaybeMangleLocalizedString para que ele uwuifique todas as strings antes da exibição. Nesta compilação especial do Chromium, ele deve sempre fazer isso, independentemente da configuração de mangle_localized_strings_.

Se vocĂȘ fez tudo certo em todos esses exercĂ­cios, parabĂ©ns, vocĂȘ deve ter criado o Chrome para duendes!

Chromium UI screenshot with uwu language
Students will likely need some hints here. Hints include:
  • UTF16 vs UTF8. Os alunos devem estar cientes de que as strings Rust sĂŁo sempre UTF8 e provavelmente decidirĂŁo que Ă© melhor fazer a conversĂŁo no lado C++ usando base::UTF16ToUTF8 e vice-versa.
  • Se os alunos decidirem fazer a conversĂŁo no lado Rust, eles precisarĂŁo considerar String::from_utf16, considerar o tratamento de erros e considerar quais tipos suportados pelo CXX podem transferir muitos u16s.
  • Os alunos podem projetar o limite C++/Rust de vĂĄrias maneiras diferentes, por exemplo, pegando e retornando strings por valor ou pegando uma referĂȘncia mutĂĄvel a uma string. Se uma referĂȘncia mutĂĄvel for usada, o CXX provavelmente dirĂĄ ao aluno que ele precisa usar Pin. VocĂȘ pode precisar explicar o que Pin faz e, em seguida, explicar por que o CXX precisa dele para referĂȘncias mutĂĄveis a dados C++: a resposta Ă© que os dados C++ nĂŁo podem ser movidos como dados Rust, porque eles podem conter ponteiros auto-referenciais.
  • O alvo C++ contendo ResourceBundle::MaybeMangleLocalizedString precisarĂĄ depender de um alvo rust_static_library. O aluno provavelmente jĂĄ fez isso.
  • O alvo rust_static_library precisarĂĄ depender de //third_party/rust/uwuify/v0_2:lib.