米Googleは、Androidのシステムプログラミングにおいて、Rustをサポートしたことを4月6日(現地時間)に発表した。
Androidアプリ開発でよく用いられているJavaやKotlinは、アプリケーションの開発には適しているものの、OSの下位層における開発では、CやC++、Rustといったシステムプログラミング言語が必要となる。
これらのシステムプログラミング言語は、低レベルのシステムリソースとハードウェアへのアクセスが可能で、より少ないリソースで、より予測可能なパフォーマンス特性を備える一方で、CとC++ではメモリの有効期間を管理する必要があり、とりわけ複雑なマルチスレッドのコードベースでは、誤りを犯しやすい。
しかし、Rustならコンパイル時のチェックでオブジェクトの存続期間/所有権を制限し、ランタイムチェックでメモリアクセスが有効であることを確認するという組み合わせで、メモリの安全性を保証している。
また、コードがC/C++で記述されており、信頼できない入力を解析する場合、Androidでは厳しく制約された特権のないサンドボックス内で行われる必要があるが、サンドボックス化はコストがかかり、サンドボックス化に必要な新しいプロセスは、追加のオーバーヘッドを消費し、IPCと追加のメモリ使用量による遅延をもたらしてしまう。さらに、サンドボックス化はバグ密度が高いため、攻撃者によって複数の脆弱性が連鎖させられてしまう可能性がある。
Rustのようなメモリセーフ言語なら、コード内のバグの密度を下げることで、サンドボックスの効果を高められるとともに、サンドボックスのニーズを減らして、リソースをより安全かつ軽量にする新機能を導入できる。
そのほか、ソフトウェアの品質と正確性を向上させるには、堅牢なテスト、サニタイズ、ファジングによるバグ検出が不可欠だが、C/C++ではコードベースが複雑なので、修正を開発およびレビュー可能な人が少なく、バグ修正に多大な労力を費やしても、修正が正しくない場合もある、というリスクを秘めている。
しかし、Rustでは、メモリ安全性の強化やデータの同時実行による競合の防止、より表現力に優れており論理的なバグの防止に役立つ型システム、デフォルトでの参照と変数の不変、標準ライブラリにおけるエラー処理の改善などによって、コードの正確性を高めており、バグが発生する可能性を抑えられる。
- 関連リンク
この記事は参考になりましたか?
- この記事の著者
-
CodeZine編集部(コードジンヘンシュウブ)
CodeZineは、株式会社翔泳社が運営するソフトウェア開発者向けのWebメディアです。「デベロッパーの成長と課題解決に貢献するメディア」をコンセプトに、現場で役立つ最新情報を日々お届けします。
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です