すべてをまとめる — 演習
この演習では、これまでに学んだことをすべて組み合わせて、 Chromium のまったく新しい機能を追加します。
プロダクトマネジメントからの依頼
人里離れた熱帯雨林に暮らすピクシーのコミュニティが発見されました。できる だけ早く彼らにピクシー向け Chromium を届けることが重要です。
要件は、Chromium の UI 文字列をすべてピクシー語に翻訳することです。
適切な翻訳を待っている時間はありませんが、幸いにもピクシー語は英語に非常 に近く、翻訳を行う Rust crate があることがわかっています。
実際、その crate は前の演習であなたがすでにインポートしています。
(もちろん、Chrome の実際の翻訳には並外れた注意と入念さが必要です。これ は出荷しないでください!)
手順
ResourceBundle::MaybeMangleLocalizedString を変更して、表示前にすべて の文字列を uwu化するようにしてください。この特別な Chromium ビルドでは、 mangle_localized_strings_ の設定に関係なく、常にこれを行うようにする 必要があります。
これらの演習を通してすべてを正しくできていれば、おめでとうございます。あ なたはピクシー向け Chrome を作り上げたことになります!
ここでは学生にいくつかヒントが必要になるでしょう。ヒントの例:
- UTF-16 と UTF-8。Rust の文字列は常に UTF-8 であることを、学生は認識し ておく必要があります。そのため通常は、
base::UTF16ToUTF8を使って C++ 側で変換し、また戻す方がよいと判断するでしょう。 - 学生が Rust 側で変換することにした場合は、
String::from_utf16、 エラーハンドリング、そして多数の u16 を転送できる CXX 対応型 のど れを使うかを検討する必要があります。 - 学生は C++/Rust 間の境界を、いくつか異なる方法で設計するかもしれません。 たとえば、文字列を値渡しで受け取り値として返す方法や、文字列への可変参照 を受け取る方法です。可変参照を使う場合、CXX はおそらく学生に
Pinを使う必要があると伝えるでしょう。Pinが何をするのか、そ して C++ データへの可変参照に対して CXX がそれを必要とする理由を説明す る必要があるかもしれません。答えは、C++ のデータには自己参照ポインタが 含まれている可能性があるため、Rust のデータのように移動させることができ ないからです。 ResourceBundle::MaybeMangleLocalizedStringを含む C++ ターゲットは、rust_static_libraryターゲットに依存する必要があります。学生はおそら くすでにこれを行っています。rust_static_libraryターゲットは、次に依存する必要があります。//third_party/rust/uwuify/v0_2:lib