GoogleがAndroidの開発にRustを使った事例を解説するRust Dayを開催(2ページ目)
ここでも、どうしてRustをLinuxに採用するのか? という問いに対しては、メモリーセーフ関連の脆弱性を性能を犠牲にせずに抑止するためと説明している。
採用するには技術的な問題もあるが、ここでは技術的ではない問題についても解説を行っている。
これからはRustのUpstreamをサポートする必要があること、メンテナーと協力する必要があること、Rustを書くLinuxデベロッパーをサポートする必要があることなどを挙げて、LinuxコミュニティがRustを使ってコードを書くことを支援する必要性を説明した。
次はRustのツールチェーンに関するセッションとして、ここでもAndroidの開発チームのエンジニアが登場。パッチの適用、ライブラリーの利用、最適化などについて詳細な解説を行った。
最後は、既存のC++プログラムをRustで書き直した事例の解説だ。
Pereira氏はフォントの圧縮プログラムであるWOFF2をC++からRustに書き直したというのがこのセッションの中身だが、まずは最初にWOFF2について説明を行った。
WOFF2はW3Cのリファレンスにも記載されているフォントのパッケージング(圧縮/非圧縮)の仕様であり、それをGoogleが実装してAndroidで使っているということになる。
WOFF2の仕様:https://www.w3.org/TR/WOFF2/
WOFF2のC++のコードは約6,700行という規模だが、ポイントは単体テストがWOFF2に特化しした実装の部分に存在しなかったという部分だろう。
そしてRustによる実装では、単体テスト、エンドツーエンドのテストを含んで約6,200行という規模になったという。またBrotilという圧縮アルゴリズムやLog、arghという外部プログラムも使われていることが紹介された。
また、移植については約20日間が必要だったと説明。機械的な移植が12日間、リファクタリングとRustらしいコードに整形するために8日間というのが内訳だ。
テストについては単体テストが最大のプログラムのエンコード、デコードのソースコードに存在しなかったことが移植のための時間が掛かった原因であると説明。
移植と同時に約20個のバグも発見して修正を行ったことを説明し、特にボロウチェッカーがちゃんと仕事をしてくれたという。
ここでも、ちゃんと書かれた単体テストによって多くのバグが発見できること、C++からRustに変換するツールがあればもっと良い結果が出ただろうなどと説明した。ベンチマークについてもほぼC++に比類する性能が出ているとして結果には満足しているという。
移植を経験した今となってはC++よりもRustでコードを書く方が生産的と感じるようになったこと、Rustの持つコンセプトは他の言語に無いため学習コストは存在したが、それを上回る利点があることなどを紹介した。
また、コードの品質に関してもRustに慣れていないプログラマーがボロウチェッカーと格闘する状態になったとすれば、コードがデータを変に操作しようとしていることに気が付いた方が良いとコメントし、Rustのコンセプトとコンパイラーの優秀さを高く評価していることを説明した。
最後に、ClippyというLinterについても高く評価してセッションを終えた。
Androidの開発を支えるチームが少しづつとは言え、Rustを使って新規機能の実装に進んでいこうとするGoogleの意図は十分に伝わったセッションとなった。Microsoft、AWSに続いてGoogleがRustを高く評価しているだけではなく実際にAndroid関連のソフトウェアの移植を行っていることはこれからAndroidのアプリを開発しようと計画している企業にとっては参考になるだろう。
- この記事のキーワード