Android プラットフォームでは、Rust で OS のネイティブ コンポーネントを開発できます。Rust は最新のシステム プログラミング言語であり、C/C++ と同等のパフォーマンスで、メモリの安全性を保証します。Rust は、オブジェクトの存続期間と所有権を適用するコンパイル時チェックと、有効なメモリアクセスを確保する実行時チェックを組み合わせることで、ガベージ コレクタを必要としません。
Rust には、デベロッパーがコードの生産性を高め、自信を持ってコードを書けるように、さまざまな最新の言語機能を備えています。
- 安全な同時実行プログラミング - この機能により、ユーザーは効率的でスレッドセーフなコードを記述できるようになるため、Rust の Fearless Concurrency スローガンが生まれました。
- 表現型システム - Rust は、表現性に優れた型(Newtype ラッパー、コンテンツを含む列挙型バリアントなど)を可能にすることで、論理プログラミングのバグを防ぎます。
- コンパイル時のチェックを強化 - コンパイル時に多数のバグが検出されることで、コードが正常にコンパイルされた場合は意図したとおりに動作するというデベロッパーの信頼が高まります。
- 組み込みのテスト フレームワーク - Rust には組み込みのテスト フレームワークが用意されており、テストする実装と一緒に単体テストを配置できるため、単体テストを簡単に含めることができます。
- エラー処理の適用 - 回復可能なエラーのある関数は、成功バリアントまたはエラー バリアントのいずれかの Result 型を返すことができます。コンパイラは、関数呼び出しから返された
Result
列挙型のエラー バリアントをチェックして処理することを呼び出し元に要求します。これにより、未処理のエラーによってバグが発生する可能性が低くなります。 - 初期化 - Rust では、使用前にすべての変数をその型の正当なメンバーで初期化する必要があります。これにより、意図せずに安全でない値に初期化されるのを防ぎます。
- より安全な整数処理 - 整数型の変換はすべて明示的なキャストです。 デベロッパーは、関数への呼び出し中に変数に代入するときや、他の型で演算しようとしたときに、誤ってキャストしてしまうことがなくなります。Android で Rust を使用する場合、オーバーフローのチェックはデフォルトでオンになっています。そのため、オーバーフロー操作を明示的に指定する必要があります。
Android Rust のサポートに関してブログを公開していますので、詳しくはそちらの記事をご覧ください。
- Android プラットフォームにおける Rust
Android チームがなぜ Rust を新しいプラットフォーム言語として導入したのか、その概要を説明しています。 - Android オープンソース プロジェクトへの Rust の統合
Rust サポートがビルドシステムに導入された方法と、特定の設計上の決定が行われた理由について説明します。 - Android プラットフォームにおける Rust と C++ の相互運用性
Android における Rust と C++ の相互運用性を確保する手法について説明します。