Збираємо все докупи --- Вправа
У цій вправі ви спробуєте додати абсолютно нову функцію Chromium, об'єднавши все, що ви вже вивчили.
Коротка доповідь від продуктового менеджменту
У віддаленому тропічному лісі виявили спільноту ельфів, які живуть там. Важливо, щоб ми доставили їм Chromium for Pixies якнайшвидше.
Вимога полягає в тому, щоб перекласти всі рядки інтерфейсу користувача Chromium на мову ельфів.
Немає часу чекати на нормальний переклад, але, на щастя, мова ельфів дуже близька до англійської, і, виявляється, є крейт Rust, яка робить переклад.
Насправді, ви вже імпортували цей крейт у попередній вправі.
(Очевидно, що справжні переклади для Chrome вимагають неймовірної ретельності та старанності. Не публікуйте це!)
Кроки
Змініть ResourceBundle::MaybeMangleLocalizedString
так, щоб він використовував uwuify для усіх рядків перед відображенням. У цій спеціальній збірці Chromium він має робити це завжди, незалежно від значення параметра mangle_localized_strings_
.
Якщо ви зробили все правильно у всіх цих вправах, вітаємо, вам варто було створити Chrome для ельфів!
- UTF16 vs UTF8. Студенти повинні знати, що рядки Rust завжди мають кодування UTF8, і, ймовірно, вирішать, що краще зробити перетворення на стороні C++ за допомогою
base::UTF16ToUTF8
і навпаки. - Якщо студенти вирішать виконати перетворення на стороні Rust, їм потрібно буде розглянути
String::from_utf16
, обміркувати обробку помилок і визначити, які CXX-підтримувані типи можуть передавати багато u16s. - Студенти можуть створити межу між C++ і Rust кількома різними способами, наприклад, приймати і повертати рядки за значенням, або приймати мутабельне посилання на рядок. Якщо використовується мутабільне посилання, CXX, ймовірно, скаже студенту, що потрібно використовувати
Pin
. Можливо, вам доведеться пояснити, що робитьPin
, а потім пояснити, навіщо він потрібен CXX для мутабельних посилань на дані C++: відповідь полягає у тому, що дані C++ не можна переміщувати, як дані Rust, оскільки вони можуть містити самопосилальні вказівники. - Ціль C++, що містить
ResourceBundle::MaybeMangleLocalizedString
, повинна залежати від ціліrust_static_biblioteka
. Студенти, ймовірно, вже зробили це. - Ціль
rust_static_library
має залежати від//third_party/rust/uwuify/v0_2:lib
.