世界で最も愛される
プログラミング言語
Rust誕生秘話
処理速度が問題になるプログラムや、ハードウェアを直接操作するプログラムを開発するなら、C/C++言語を選ぶのが当たり前だった。C/C++に取って代わる言語は長らく登場しなかったが、最近になってRustが注目を浴びている。 by Clive Thompson2023.06.12
多くのソフトウェア開発プロジェクトは、思いもよらないところから生まれる。解決しなければならない個人的な問題を抱えたプログラマーが生み出すこともある。
グレイドン・ホアレの身に起きたのも、多かれ少なかれそういう事態だった。2006年、ホアレはオープンソースのWebブラウザー「ファイアーフォックス(Firefox)」を開発するモジラ(Mozilla)に勤める、29歳のコンピューター・プログラマーだった。バンクーバーのアパートに戻ってきたホアレは、エレベーターが故障していることに気づいた。エレベーターの制御ソフトウェアがクラッシュしていたのだ。しかもこれが初めてというわけではなかった。
ホアレは21階に住んでいた。階段を登っている間、いらいらしていた。そして「馬鹿げている」とホアレは思った。「私たちコンピューターに携わる人間が、故障せずに動くエレベーターすら作れないなんて!」こうしたクラッシュの多くが、プログラムによるメモリの使い方の問題に起因することをホアレは知っていた。エレベーターのような機器に組み込まれるソフトウェアは、多くの場合プログラミング言語C/C++で書かれている。C/C++は非常に速く動作するプログラムを作成でき、プログラム自体のサイズもコンパクトに収まることで知られる。問題は、C/C++言語がメモリ・バグ、つまりクラッシュの原因となるエラーを誘発しやすいということだ。マイクロソフトは、同社のコードの脆弱性の70%はC/C++言語で書かれたコードのメモリ・エラーに起因すると見積もっている。
私たちのほとんどは、もし21階まで階段を上る羽目になったとしても、腹を立ててそこを離れるだけだろう。しかしホアレは自分で解決策を講じることにした。ノートPCを開き、新しいコンピューター言語の設計を始めたのだ。サイズが小さく、速く動作するプログラムを、メモリ・バグを起こすことなく書けるようにすることを目指すものだった。ホアレはこの言語を「Rust(ラスト)」と名付けた。いわく「生きのびるために過剰な改良を重ねた」非常に丈夫な菌類(さび菌)から取ったという。
17年後、Rustは地球上で特にホットなプログラミング言語の1つになった。もしかしたらもっとも注目されている言語なのかもしれない。Rustでコードを書いているプログラマーは280万人にのぼり、マイクロソフトやアマゾンなどの企業は、Rustが自社の未来を担う重要な言語だと考えている。チャット・サービスのディスコード(Discord)はRustを使用してシステムを高速化しており、またドロップボックス(Dropbox)はクライアント・コンピューターとのファイル同期処理にRustを活用している。クラウドフレア(Cloudflare)はRustで作成したプログラムで、全インターネット・トラフィックの20%超を処理している。
プログラマーが集うインターネット掲示板、スタック・オーバーフロー(Stack Overflow)では、毎年世界中の開発者から投票を募っており、Rustは7年連続で最も「愛される」プログラミング言語に選ばれている。米国政府でさえ、政府機関での業務のセキュリティ強度を高める手段として、Rustで開発したソフトウェアを強く推奨している。成功した多くのオープンソース・プロジェクトと同様、Rustはコミュニティが開発している。現在は数百人もの熱心なコントリビューター(開発に貢献するエンジニア)がおり、その多くがボランティアだ。ホアレ自身は2013年にプロジェクトの第一線から退き、モジラ社内のコア・チームを含むほかのエンジニアに後を託した。
誰かが新しいプログラミング言語を開発するというのは珍しいことではない。本業の傍らで、小規模なプログラミング言語を開発するプログラマーは多い。しかしこうした言語が根付き、 JavaScriptやPython、Javaなどの有名な言語と肩を並べるまで成長することは彗星が落ちてくるくらい稀なことだ。Rustはどうやってそれを成し遂げたのだろうか?
なぜそこまでRustが役立っているのかを理解するために、まずはプログラミング言語がコンピューターのメモリをどのように扱っているのか、その舞台裏を見てみよう。
非常に大まかにいえば、コンピューターの内部の動的メモリは黒板のようなものと考えることができる。ソフトウェアが動作すると、黒板には絶えず小さなデータが書き込まれていき、どのデータがどこにあるのかが記録される。そして必要がなくなれば消去され、データが書き込まれていた領域は解放される。しかしそのやり方はプログラミング言語によって異なる。C/C++などの比較的古い言語では、プログラマーがこの黒板を使う方法やタイミングを自由に決めることができる。この力は便利なものだ。動的メモリ管理の自由度が高いと、プログラマーは非常に速く動作するソフトウェアを作ることができる。このため、C/C++はしばしばハードウェアを直接操作する「ベアメタル」コードを書くのに使われてきた。透析装置や小売店で使うレジスターなど、ウィンドウズやリナックスをはじめとするオペレーティング・システムを持たない機械がベアメタル・コードで動作する(また、より高度な用途でも使用する。場合によってはオペレーティング・システムとハードウェアの相互通信が必要になる。特にウィンドウズ、リナックス、マックOSのカーネルはいずれも大部分がC言語で書かれている)。
しかしプログラムが高速に動作するという長所と引換えに、C/C++言語には弱点がある。メモリのどの部分に書き込むのか、また書き込んだデータをどの時点で消去し、その領域をいつ開放するのか、プログラマーが注意深く追跡しなければならないのだ。たまたま何かを消し忘れてしまうと、クラッシュにつながることがある。ソフトウェアが空だと認識しているメモリ領域を後から使おうとしても、実際はそこにデータが入っているからだ。あるいは攻撃者がそこから忍び込むかもしれない。メモリに書き込んだデータが適切に消去されていない(パスワードや銀行口座の情報など、消去されるべき情報がまだ残っている)プログラムをハッカーが見つけ出し、こっそりとそのデータを盗み出す可能性がある。C/C++のコードの規模が大きくなればなるほど、最も注意深いプログラマーでさえも、メモリ管理のミスを大量に犯し、ソフトウェアをバグでいっぱいにしてしまう可能性があるのだ。
「C/C++では、自分の書いたコードがいつ爆発するか分からないという恐怖がいつも付きまとっていました」。オランダに本拠地を置き、ドローン開発を手掛けるフュージョン・エンジニアリング(Fusion Engineering)の共同創業者兼最高技術責任者(CTO)であり、Rustの標準ライブラリ・チームで責任者を務めるマーラ・ボスはそう述べる。
1990年代になると、JavaやJavaScript、Pythonなどの新しい言語が人気を集めるようになったが、これらの言語はメモリ管理についてC/C++とは異なるアプローチを採っている。プログラマーにかかるストレスを減らすために、ソフトウェアの一部が動作しているときに、使用済みのメモリ領域を定期的に自動で解放する「ガーベジ・コレクション(ごみ収集機能)」のコンポーネントを使い、メモリを自動で管理するようにしたのだ。そのおかげでメモリ管理ミスがないコードを書けるようになった。ただし、メモリ空間をきめ細かく管理できなくなった。またプログラムの動作も緩慢になった(ガーベジ・コレクションにはかなりの処理時間がかかる)。さらにガーベジ・コレクションを使用する言語でプログラムを作成すると、多くのメモリを消費するプログラムが出来上がる。この結果、プログラミングの世界は大まかに2つの部族に分かれた。高速に動作するソフトウェアや、機器に埋め込まれた非力なマイクロプロセッサーで動作することが求められるソフトウェアは、C/C++で記述することが多い。近年急速に増加している、Webアプリケーションやモバイルアプリケーションは、ガーベジ・コレクションを使える新興のプログラミング言語を使用する。
ホアレは、Rustの開発において上記2種類のアプローチのちょうど境目に位置する言語とすることを目指した。メモリのどこにデータを書き込んでいるのかをプログラマー自身がいちいち把握する必要はない。その役目はRustが担う。ただしRustでは、プログラム内でデー …
- 人気の記事ランキング
-
- What’s on the table at this year’s UN climate conference トランプ再選ショック、開幕したCOP29の議論の行方は?
- Why AI could eat quantum computing’s lunch AIの急速な進歩は 量子コンピューターを 不要にするか
- Google DeepMind has a new way to look inside an AI’s “mind” AIの「頭の中」で何が起きているのか? ディープマインドが新ツール
- This AI-generated Minecraft may represent the future of real-time video generation AIがリアルタイムで作り出す、驚きのマイクラ風生成動画