なぜRustがシステム・プログラミングに最適なのか?
マイクロソフトのチーフクラウド開発者 Ryan Levick が Rust を推奨
マイクロソフトのチーフクラウド開発者 Ryan Levick は、Rust を採用する意図を示すいくつかの記事を発表しました。彼は、安全なシステムプログラミング言語の重要性を説明し、Rust を選んだ理由を明確にしました。
彼が Rust 言語を使うきっかけとなったのは、ある日仕事に向かう途中で道路を横切るリスに遭遇し、急ブレーキで避けた経験でした。彼は、自分が無事でいられた理由は、自動車のアンチロックブレーキシステム(ABS)によって車のスリップが防止されたからだと考えました。
この経験を通じて、彼は自動車業界が新しい技術を使ってドライバーを守る方法を模索していることに気づきました。では、なぜソフトウェアセキュリティ業界も同様の方法で開発者を保護できないのでしょうか?その結果、彼は不安全な古い言語を放棄し、より現代的で安全なシステムプログラミング言語である Rust への移行を進めるべきだと感じたのです。
Rust は C と C++ の最良の代替品
Ryan Levick は、Rust が C と C++ の最良の代替品であると述べています。主な理由は以下の三つです:
-
パフォーマンスと制御
プログラマーが C と C++ の使用を手放せない理由は、そのパフォーマンスと制御にあります。しかし、Rust は C や C++ のように最小限のオプションの「ランタイム」を持っており、この点で非常に優れています。この利点は、Rust の標準ライブラリが Libc に依存しつつもオプションであり、オペレーティングシステムがなくても実行可能である点にあります。
Rust は C や C++ と同様に、メモリの割り当てを細かく制御できるため、プログラマーは実行フローをより明確に理解できます。
パフォーマンスにおいて、Rust、C、C++ は同様の観点から考えることができます。
-
安全性
Rust の最大の利点は安全性の保証にあります。Rust の安全性は「メモリ安全性」に基づいています。
これが意味するのは、2004年以降、セキュリティ対応センターがすべてのレポートを分類した結果、大部分の脆弱性と CVE は開発者が意図せずメモリ破損のバグを C や C++ のコードに挿入したことに起因しているということです。
マイクロソフトでは、約 70% のセキュリティ問題がメモリ安全性に関連しています。もし Rust を使ってプログラムを作成した場合、これらの 70% のセキュリティ問題は解決されることになります。
時には、システムプログラミングで書かれたコードが安全であることを保証できない場合もあります。しかし、Rust はこれらの操作を安全にカプセル化するツールを提供しており、これにより本来実行できなかったコードが Rust コンパイラによって静的に強制されることになります。
-
その他の理由
Rust を選ぶ理由は性能と安全性だけではありません。主な理由には以下の点が挙げられます:
- 内部調査によると、Rust の理由の一つは「精密性」(correctness)であり、これも Rust の安全性の延長線上にあります。
- Rust はプログラムの多くの特性を静的に強制することができ、これによりメモリ安全性だけでなく、ヌルポインタの安全性やデータ競合の安全性(複数のスレッドから同じメモリ領域にアクセスする際の同期問題)も実現できます。
Rust の豊富なシステム型は、プログラマーがより表現力豊かなプログラムを作成できるようにします。関連データを持つ列挙型や強力な trait システムなどの概念は、Rust の目標を強化し、プログラムのエラーをできるだけ少なくすることを目指しています。
もちろん、Rust の学習にも大きな利点があります。新しい言語を学ぶ際には、そのコアコンセプトだけでなく、ライブラリ、ツール、学習資料にも注目する必要があります。
Rust はまだ若い言語ですが、健全なエコシステムを持ち、オープンソースコミュニティを強化しつつ、商業利用にも対応しています。これが、マイクロソフトが Rust の将来に大きな期待を寄せている理由です。
Rust の課題
Rust には欠点もあります。たとえば、Rust の「unsafe」を一定の範囲内でどのように使用するか、Rust と C++ の相互運用性をどう解決するか、そして現在の Microsoft ツールとの相互運用性の問題です。
それでも、マイクロソフトは Rust に大きな期待を寄せており、「私たちはこれらの可能性を歓迎します。Rust が Microsoft のエンジニアリング全体にどのように適応するかについてはまだ多くの問題がありますが、それでも私たちは多くの人々がこの言語を使い、システムプログラミングのニーズを満たすことを希望しています」と述べています。