Skip to content

Freedom to Crash

LinuxカーネルにRustのコードを入れるかどうかで、メーリングリストが荒れた。リーナスが、既存のC言語コードを管理しているメンテナーの反対を押し切ってでもマージすると発言したからだ。

数十年C言語で築き上げてきたコードベースに、異なる言語を入れることへの抵抗は理解できる。抽象化レイヤーが隠れたパフォーマンス劣化を生むという技術的な懸念もある。ただリーナスの判断は明確だった。Rustのメモリ安全性は、カーネルの品質を上げる。メンテナーの感情より、コードの安全性を取る。

RustがC++を置き換えるのは時間の問題だと思っている。

メモリ安全性をコンパイル時に保証する。所有権と借用のモデルでダングリングポインタもデータ競合もコンパイルエラーにする。C++で数十年間踏み続けてきた地雷を、言語仕様で消した。LinuxカーネルにRustが入り、AndroidもRustに舵を切り、MicrosoftもWindowsの一部をRustで書き直している。流れは決まっている。

C++は人間を信頼しすぎている。ダングリングポインタを作るのも、二重解放するのも、バッファオーバーフローするのも、全部プログラマの責任だ。言語は何も止めてくれない。自由で、その分危険だ。

Rustのボローチェッカーは厳しい。コンパイルが通らない。書き方を変えろと怒られる。慣れるまではストレスだ。ただ通った瞬間、ある種のメモリ安全性が保証される。C++では祈りながら実行していたことを、コンパイラが証明してくれる。

それでもOSSくらい好きな言語で書きたい。

仕事ではRustを選ぶべき場面が増えていくだろう。チームの生産性、メンテナンスコスト、セキュリティ。合理的に考えればRustだ。でも個人プロジェクトでは、たまにセグフォで落ちるC++を書いていたい。クラッシュする自由がほしい。安全な檻の中では見えない景色がある。

まあ、景色を見る前にコアダンプを見ることのほうが多いのだが。