Rustの概要や特徴、将来性について知りたい
Rustのインストール方法や簡単なプログラムを作成する方法が知りたい
新しい言語を始めるにあたり、上記のようなことが気になる方も多いのではないでしょうか?
そこで今回は、比較的新しいプログラミング言語であるRustについて詳しく解説していきます。
メモリ管理については、C++との比較になっていますが、C++が分かる人にも分からない人にもわかるように書きました。
最後に、定番ですがRustでHello Worldも説明しています。まずは理屈っぽいところを読み飛ばしても構いませんので、この機会にぜひRustを体験してみてください!
【こんな方に向けて書きました】
- Rustを1から学びたい方
- 未経験で新しいプログラミング言語を学びたい方
- 将来性の高いプログラミング言語を学びたい方
プログラミング言語「Rust」とは
Rustとは何か
Rustは、安全性、速度、並行性の3つに焦点を合わせて開発が進められているプログラミング言語です。
プログラミング言語には、C++のようなコンパイル言語と、Pythonのようなスクリプト言語があります。
コンパイル言語は、人が理解できるように書いたプログラムを機械が実行できるように変換します。
スクリプト言語では、このような変換が必要ありません。
Rustは、C++のようなコンパイル言語で、Windowsの場合はexeファイルを作成できます。
安全性(安全なメモリ管理)
変数に「寿命」を与えることで、解放された変数にアクセスすることを防ぎます。また、変数に「所有権」を与えることで、複数の箇所から同時にメモリを書き替えることを防ぎます。どちらもコンパイラによってチェックされます。
速度
ネイティブに近い環境で実行されるため高速に動作します。多数のベンチマークにおいて、自然に書かれたC/C++に匹敵しているそうです。
並行性
安全性(安全なメモリ管理)でも紹介されている「所有権」の仕組みにより、マルチスレッドでも安全に実行できます。
Rustの歴史
Rustは、C++の問題点を改善するために、Graydon Hoareが(仕事ではなく)趣味で開発を始めました。
したがって、Rustの歴史を振り返る前に、C++の特徴を少しだけ説明しておきましょう。
C++は、高速に動作するアプリケーションを開発できる言語です。
動作速度が重要なアプリケーションの開発には、C++が使われると言われています。
その反面、メモリ管理をプログラマが正確に行う必要があり、これがなかなか難しいのです。
さて、Rustの話に戻しましょう。
Rustは、「安全で効率的な優れたコードを容易に記述、維持、デバッグできるプログラミング言語」を開発することを目標としているそうです。
その一面として、C++で難しかった「メモリ管理を容易」にしながらも、「高速に動作するアプリケーションを開発できる」言語として成長していったのです。
では、Rustの歴史を振り返りましょう。
2006年。Graydon Hoareが趣味で開発を始めます。
2009年。Moziila(Firefoxを開発していることで有名)がRustに関心を示し、開発チームを編成します。
2010年。7月に開催された2010 Mozilla Summitで公開されます。ちょうど、Firefox 4のβ版がリリースされた頃ですね(現在はFirefox Quantum 57)。
それから7年半経った2017年12月時点での最新版は、2017年11月22日に公開されたRust 1.22.1です。
Rustの特徴
ここまで、たくさんのプログラミング言語が存在する中で、なぜRustが開発されたのかを説明しました。
次は、Rustが開発された目的を理解したうえで、Rustの特徴を見ていきましょう。
私が感銘を受け、Rustに挑戦してみたい!と思わせてくれたのは、特徴的なメモリ管理です。
Rustの言語仕様
Rustはメモリ管理(変数管理)が特徴的です。
変数をコピーするときに、いくつかの制限がかかると考えるとよいでしょう。
ここでは制限のうちの一つである「所有権」について、具体例を見てみましょう。
以下のコードは、ベクタを作成し、v2にコピーしてから、vの値を表示しようとしています。
let v = vec![1, 2, 3]; let v2 = v; println!("v[0] is: {}", v[0]);
しかし、このコードは(実行時ではなく)コンパイル時にエラーとなり、コンパイルできません。
Rustには「変数に所有権を与える」という考え方があり、vec![1, 2, 3]の所有権は、v2に移っているため、vからはアクセスできないのです。
これを知ったとき、今まで気軽に変数をコピーしてきた自分を呪うほどに驚きました。
私の中で、変数を不用意にコピーすることに対する少しのモヤモヤが、「所有権」という考え方で言語化され、一気にモヤモヤが晴れるような気持ちになりました。
「変数を不用意にコピーしない」という考え方をコンパイラがサポートしてくれるのですから、素晴らしい言語だと思いました。
実は、コンパイル時にエラーになることもRustの特徴です。
「高速に動作するアプリケーションを開発できる」という目的を実現するために、コンパイル時のチェックを手厚くして、実行時の負荷を小さくし、高速に動作できるようにしているのです。
その他にも特徴は多々あるのですが、この記事では書ききれません。
ぜひ、プログラミング言語Rustを読んでみてください!
Rustの採用事例
Rustの採用事例を見ていきましょう。
何はなくとも、Mozillaが2013年から開発に携わり支援しているレンダリングエンジン「Servo」です。
Rustは、Servoの開発言語として採用されることで、同時並行的に開発が進められてきました。
Servoを開発するためのRustであり、Rustを進化させるためのServoだったとも言えるでしょう。
現在では、Firefox Quantumの一部のコンポーネントが、Gecko(従来のレンダリングエンジン)のものから、Servo(Rustで開発されたレンダリングエンジン)のものに置き換えられています。
その他のプロダクトでも採用が進んでいます。
以下のサイトを見ると、かの有名なオンラインストレージサービスDropboxや、今では欠かせないコミュニケーションツールとなっているLINEのロゴもありますね。
参考:https://www.rust-lang.org/ja-JP/friends.html
Rustの将来性
C++の特徴であった「高速性」を維持したまま、安全なメモリ管理を容易に実現できるという点だけ見ても、十分に将来性があります。
Rustは、ブラウザシェアの2~3位を維持しているFirefox(の一部コンポーネント)で採用されているのですから、これからも言語として進化していくことに疑いの余地はありません。
RustはC++と入れ替わってくるという見かたもありますので、ぜひ一度試してみてください!
Rustでプログラムを作ってみよう!
お待たせしました。
Windows 10で挑戦する、Rustで「Hello, world!」です!
Rustのインストール
まずは公式サイトからRustのコンパイラをインストールしましょう。
参考:https://www.rust-lang.org/ja-JP/
Windowsでインストール用のページにアクセスすると、自動的にWindows用の内容が表示されているようです。
スマホからアクセスすると、別のページが表示されていました。
ダウンロードしたインストーラを起動して、画面の指示に従い、1を入力してEnterキーを押したりしましょう。
これでコンパイラがインストールされました。
プログラムの作成
Rustの拡張子は慣例的にrsです。
メモ帳でhello_world.rs(実態はただのテキストファイル)を作成しましょう。
fn main() { println!("Hello, world!"); }
今回は、以下の画面のように「D:\Rust\hello_world」フォルダに「hello_world.rs」を作成しました。
コンパイル
コマンドプロンプトを起動し、Dドライブの「Rust\hello_wolrd」フォルダに移動してから、hello_world.rsをコンパイルします。
具体的には、以下の画面のように入力しましょう。
改めてエクスプローラーで確認すると、確かにhello_world.exeが作成されていますね!
プログラムの実行
hello_world.exeをダブルクリック…と言いたいところですが、すぐにウィンドウが閉じてしまうので、コマンドプロンプトから実行しましょう。
コンパイルした続きの画面で、「hello_world.exe」と入力してEnterキーを押します。
いかがでしょうか。「Hello, world!」と表示されましたか?
まとめ
今回は、開発が始まってから10年以上が経っているRustを紹介しました。
バージョンもあがっており、現在でも十分に安定しており、将来性も高いプログラミング言語です。
Hello Worldでは体験できなかったメモリ管理の驚きを、頭のモヤモヤが晴れていく気持ちよさを、ぜひ体験してみてください!