プログラミング言語「Rust」の特徴とできることを紹介!
こんにちは!
現役Webエンジニアの今井(@ima_maru)です。
本記事は、今注目を集めているプログラミング言語「Rust」についての記事になります。
Rustは、2010年に登場した比較的新しいプログラミング言語で、近年人気急上昇中のプログラミング言語のひとつです。
まだまだ案件数は多くないですが、着実に人気を増し続けてきているため、今後メジャーな言語となる可能性も十分に考えられるでしょう。
また、非常に特徴的な一面を多く持ち合わせており、プログラミング言語の中でも異色のような存在というイメージを持つ方も少なくないでしょう。
そんな今注目のプログラミング言語Rustについて詳しく見ていきましょう。
- Rustは2010年に登場した比較的新しいプログラミング言語
- 開発元はFirefoxやThunderBirdなどを開発している「Mozilla」
- 高い処理速度、独自のメモリ管理方法「所有権」などの特徴がある
- 主な用途はWeb開発やOS開発
- 人気や需要を着実に伸ばし続けているプログラミング言語のひとつ
プログラミング言語「Rust」とは?
プログラミング言語「Rust」は、2010年に登場した比較的新しいプログラミング言語で、開発元はWebブラウザのFirefoxやメールソフトのThunderBirdで有名なMozillaです。
長い歴史を持ち根強い需要がある「C言語/C++」に取って代わるプログラミング言語を目指しており、高いパフォーマンスを発揮できる言語として注目されています。
また、Rustには「所有権」と呼ばれる特殊なメモリ管理方法があり、C言語/C++が苦手としているメモリ安全性を高いレベルで提供していることも特徴的です。
主にWebアプリ開発やAPIサーバー開発などに用いられる言語で、近年人気が急上昇している言語の1つです。
ただ、初心者が学ぶ言語としては難しすぎるのでおすすめしません!
プログラミング言語「Rust」の特徴を3つ紹介!
Rustの特徴①:言語自体の高い処理能力・実行速度
Rustは、高水準・高級言語の中でトップクラスの処理能力・実行速度を持っています。
要は、高いパフォーマンスを引き出すことができるプログラミング言語ということで、イメージ的には「Rustで書いたプログラムは速く動作する」という風に捉えてもいいかもしれません。
しかし、あまりよろしくない書き方をすると「ほかのプログラミング言語のほうが速い。。。」といったこともあるので注意が必要です。
Rustの特徴②:OSやドライバなどの低レイヤーの処理を必要とするソフトウェア開発ができる
OS(オペレーティングシステム)やデバイスドライバなどを開発するためには、メモリ管理、CPUやGPUなどへの命令などの低レイヤー・低レベルの処理を定義できることが必要不可欠です。
かみ砕いていえば、コンピュータの具体的かつ詳細な処理までかけるということ。ほかの多くの言語(有名どころ)はそうはいきません。
例えばプログラミング言語「Python」は、このような低レイヤーの細かい処理を自前で書くことはできない代わりに、プログラミング言語が自動的に補完してくれています。
よく言えば簡単にいろんな処理を書くことができますが、悪く言えば細かい処理まで定義することができないということです。
一方Rustは、C言語と同様に高級言語でありながらメモリ管理を行うことができるプログラミング言語であり、さらには、機械語やアセンブリ言語と組み合わせて使うことができるため、CPUやGPUなどに直接命令を出すこともできます。
Pythonに「腕を上げて」と命令するところを、Rustなら「三角筋前部、大胸筋上部、烏口腕筋(うこうわんきん)を用いて、両腕を伸ばしながら前方→上方へと上げていってください」というように事細かに命令することができるというイメージです。これが低レベルの処理を記述できるということです。
OS開発ではまだまだC言語がメジャーですが、低レベルの処理を書けるRustが、今後のOS開発のメジャー言語になることもあるかもしれません。
こういったソフトウェアの開発のことを「システムプログラミング」と言ったりもしますね。
Rustの特徴③:新しいメモリ管理方法「所有権」による高い安全性
Rustは、「所有権」と呼ばれる独自のメモリ管理方法を採用しており、この機能により安全なメモリ管理と並行性を実現しています。
簡単に言えば「自前でメモリ管理ができるのに安全」ということ。ほとんどの言語は勝手にメモリ管理してくれているので自前で行うことはできません。
プログラミング言語において、プログラムがどのようにメモリを扱うかを決める「メモリ管理」は非常に重要です。
というのも、メモリ管理を適切に行わなければ、以下のようなメモリ関連のバグが発生する可能性があるからです。
- メモリ開放を正しく行えておらず、プログラムの実行中にメモリリークが発生し、異常終了する。
- 無効なメモリ領域を参照してしまい、アクセスエラーや予測不能なバグが発生する。
特に、メモリ管理を自前で行う必要があるC言語/C++では、こういったメモリ関連のバグが発生しやすいという問題があります。
この問題に対処するために、Javaなどの多くのプログラミング言語には、定期的に不要なメモリ領域を判別し自動で解放してくれる機能「GC(ガベージコレクション)」があり、この機能によって自動的なメモリ管理を実現しています。
プログラマーがメモリ管理を意識せずにプログラミングできるのは、GC(ガベージコレクション)が裏でお掃除してくれている場合がほとんどです。
しかしRustにGCの機能はありません。代わりに、Rust特有のメモリ管理方法である「所有権」という機能を使います。
その名の通り、メモリの所有者を決め、所有者がいなくなった時点でメモリを開放するというような仕組みです。
ここでC言語/Java/Rustのメモリ管理方法をまとめると以下のようになります。
プログラミング言語 | メモリ管理方法 | 身近な例で表現すると... |
---|---|---|
C言語/C++/アセンブリ言語 | 使わなくなるであろうメモリは自分で解放する | 「電気付けたら消してよ!忘れないでって言ったじゃん!」方式 |
Javaなどの多くの言語 | 使われていないメモリを定期的にお掃除してくれる(GC) | ちょっと経ったら自動で止まる、まるで温泉の押しボタン蛇口方式 |
Rust | 所有者がいなくなった瞬間に自動的に解放される(所有権) | 人が立った瞬間にすべてを流す、人感センサー付きトイレ方式 |
これがほかのプログラミング言語ではない独自の機能で、癖が強いと感じる人も多いです。
所有権について詳しく知りたい方は、少し難しいですが以下の記事などを参考にしてみてください。
Fearless Concurrency(怖くない並行処理)
並列プログラミングを安全かつ効率的に扱うことも、Rustの大きな目標の一つです。プログラムの異なる部分が独立して実行される並行プログラミングと、プログラムの異なる部分が同時に実行される並列プログラミングは、マルチプロセッサを活用するコンピュータが増えるにつれて、ますます重要性を増しています。歴史的に、このような文脈でのプログラミングは難しく、エラーが発生しやすいものでした。Rustはそれを変えたいと考えています。
Fearless Concurrency - The Rust Programming Language (rust-lang.org)
プログラミング言語「Rust」でできることを3つ紹介!
Webアプリ開発・APIサーバー開発(バックエンド)
Rustは、WebアプリケーションやAPIサーバーの開発を行うことができます。要は、バックエンド開発ですね。
Webフレームワークとしては「actix-web」「Rocket」などが有名です。
特に、高い処理能力があるため、アクセスが集中するWebサーバーで高い力を発揮するでしょう。
OS開発
Rustは人気のプログラミング言語の中で、低レイヤー・低レベルの処理を書くことができるという特徴があるため、それらが必須であるOS開発を行うことができます。
実際、PCのOSの中で非常に有名な「Linux」の一部にRustを組み込むプロジェクト「Rust for Linux」やRustで書かれたOS「Redox」など、すでにOS開発でRustが使われている実績があります。
まだまだOS開発ではC言語/C++が優勢ですが、今後長い目で見たときにRustが主流になるということも考えられなくはありません。
機械学習
Rustはコンピューターの高いパフォーマンスを引き出す能力を秘めているため、非常に計算量の多い機械学習のプロジェクトとは相性が良いです。
しかし、まだまだPythonなどに比べて機械学習用のフレームワークやライブラリは充実していないと言えるでしょう。
フロントエンド開発(Wasm/WebAssembly)
Rustは、WebAssembly(読み方はウェブアセンブリ、略してWasm)という仕組みを利用してフロントエンドの開発を行うことができます。
これは、JavaScriptと併用してより高速で動作するWebページを作ることができるようになるイメージです。
僕も詳しいことはわからないので、興味のある方は以下の記事とかを見てみてください。
実行速度が求められるソフトウェア開発
Rustは、言語自体の高い処理能力があるため、実行速度が求められるソフトウェア開発に向いている言語です。要は、大量の処理が必要なソフトウェアの開発に向いています。
例えば、以下のようなものが挙げられます。
- 機械学習
- 画像処理/音声処理など
- 囲碁や将棋などのゲームAI
- 特定のアルゴリズムを必要とするソフトウェア
- 検索エンジン(検索アルゴリズム)
- 生産スケジューラー(最適化アルゴリズム)
- 大量のトラフィックを捌く必要があるWebサーバー
- 競技プログラミング
これらは一部分にすぎず、実行速度が重要視される場面は結構多いです。
その点で、実行速度がトップクラスに速いRustはそれだけでメリットがあるのです。
プログラミング言語「Rust」のまとめ
本記事ではRustについて解説しました。
Rustの特徴やできることがおわかり頂けたかと思います。
C言語/C++の代替になる可能性があるのはまだまだ先のことだとは思いますが、今後さらに需要が高まっていくことは間違いないでしょう。
流行りに乗ってみたいという方や、競技プログラミングに挑戦してみたいという方は学んでみてもいいかもしれませんね。
最後までご覧いただきありがとうございます。