コンセプトから学べばRustは難しくない

今一番熱いプログラミング言語「Rust」

最近大注目のプログラミング言語、⁠Rust(ラスト⁠⁠」をご存じですか? RustはWebブラウザ「Firefox」で有名なMozillaを中心に開発されたも言語で、そのFirefoxの開発にも使用されています。ストレージサービス「Dropbox」の開発でも活用されるなど徐々に採用が増えています。言語の特徴としては、高性能で安全性の高いプログラムが書けることが挙げられます。組込みやOSにおける低レイヤの処理を書いたり、ブラウザ上で重い処理を担わせたりするなど(WebAssembly⁠⁠、パフォーマンスが要求される場面での活躍が期待されています。

Rustの強みと学習の壁

Rustは高性能で安全性の高いプログラムが書けると説明しましたが、それはRustが優れたメモリ管理の機構「所有権」を持っているからです。

Rustでは、メモリ上に確保された値ひとつひとつに所有者が設定され、所有者がいなくなるかライフタイム(生存期間、ほかの言語での「スコープ」にあたるもの)が終わった値はメモリから破棄されます。

Rustと同じく低レイヤに強いC言語にはこういったしくみはなく、不要になったメモリ領域はプログラマーが明示的に確保・解放しなければなりません。そしてこれを怠ると、バッファオーバーランやメモリリークが発生し、プログラムの安全性が脅かされます。

不要になったメモリ領域の解放については「ガベージコレクション」という機能で対応している言語もあります。これは、どの変数からも参照されなくなったメモリ上の値をその都度、自動的に解放していくという機能です。一見便利な機能に思えますが、ガベージコレクションの処理は重く、プログラムの性能に悪い影響を及ぼすことがあります。Rustでは所有権のしくみにより、プログラムのコンパイルの時点で不要なメモリを割り出すことができ、ガベージコレクションを必要とせず、速度低下の心配がありません。

このように、Rustの所有権は非常に頼もしいしくみですが、ほかの言語ではみられない特徴的な仕様で、Rust初学者の壁になっています。所有権の考えを理解したうえでコードを書かないと、何度もコンパイルエラーに遭うはめになります。

コンセプトがわかればRustがわかる

プログラミングにおいては、いまいち理解できない書き方であっても、⁠これはこういうものだから」とおまじない的に納得することはできます。ただ、裏でどういう処理が動いているかがわからなければ、トラブルに遭ったり込み入った処理を書こうとしたりすると、途端にどうすれば良いかわからなくなるものです。Rustで言えば、所有権を失った値を参照するとエラーになりますが、なぜエラーになるかがわからなければ、そのときはエラーを解消できたとしても、この先同じような目に何度も遭うことでしょう。しかし、前述のとおり、⁠メモリ管理からプログラマーを解放する」⁠処理の重いガベージコレクションを排する」という所有権のコンセプトを考えれば、値と変数が所有権によって結び付くイメージも理解しやすくなり、エラーも少しずつ減っていくことでしょう。

コンセプトから理解するRustでは、所有権を始めとしたRustの難解な仕様をピックアップし、⁠なぜそのような仕様になっているか」という言語のコンセプトに重きを置いて解説しています。難解な書き方も、なぜそのような仕様になっているかというコンセプトがわかれば、納得感を持ちながら学習を進められるでしょう。