Rustとは
Rustは2015年に正式リリースされたプログラミング言語。
Rustの特徴を端的にまとめると
-
- 実行速度が速い
-
- * 安全性が強力に担保されている
-
- * 幅広い実装が可能
-
- * モダンな文法がそろう
- * ツールの充実 など
高速な実行速度
Rustの実行速度はとても速く、最速?といわれるC言語に匹敵する速度を誇る!!
⇒Rustは機械語に直接コンパイルされる
⇒ガベージコレクションを持たない
⇒「ゼロコスト抽象化」を追求している
機械語に直接コンパイル??
PythonやJavaなどの言語は独自の仮想マシンを持っていて、様々な環境下でプログラミング言語を実行しやすくなるメリットが存在する。
⇒インタープリンタやコンパイラを介す仮想マシン用の言語を生成する。
⇒仮想マシンをソフトウェア上に実装するので、速度面で不利になってしまう。
一方、C言語やC++、Rustなどは、コンパイル後に機械語に変換するため、仮想マシンを返さないため、仮想マシンに起因した速度低下はおこらない。
ガベージコレクション!?
Rustが速い理由として、仮想マシンを持たないことがあげられたが、実はGOも仮想マシンをもっていない。では、この仮想マシンを持たないもの同士の速度差の原因は何なのだろうか?
参考
ガーベジコレクション – IT用語辞典
ガベージコレクションとは
…プログラムはコンピュータのメモリと呼ばれる領域をその都度確保、解放を行コストいながら計算処理を行っており、処理中に確保して使われなかった部分は不要メモリとなる。これを長時間確保し続けると使えるメモリ領域が少なくなっていくので、ガベージコレクションといわれる処理を行い、不要メモリを開放して使えるようにする。
この便利な機能にも落とし穴が存在する
-
- 不要メモリがいつ解放されるかわからない
-
- 不要メモリを開放するときに、計算処理をわずかに止めてしまう可能性がある。
- ⇒ガベージコレクションを使うか使わないかという違いが、RustとGOの速度面での違いの理由といえる。
CやC++は、ガベージコレクションを持たない代わりに手動でメモリ領域の管理を行う。
⇒これによって不要メモリがいつ解放されるかわからないという欠点を補うことに成功している。しかし、メモリ領域解放を忘れる、解放した領域を再度解放してしまう(メモリが安全ではない)という問題もある。
Rustは人間ではなく、プログラミング言語側でメモリ管理を行うようにしている。「所有権」「借用」「ライフタイム」といった新しい仕組みを実現することで安全で処理速度を低下させないことに成功している。
ゼロコスト抽象化??
ゼロコスト抽象化とは、C++で追求されてた概念で、抽象化の機能を追加コストを支払うことなく使用できることをいう。例えば、抽象化が例として挙げられる。抽象化を行うと何らかの犠牲を払う必要のある言語が多い中、Rustは、抽象化を「ゼロコスト」で行うことができるため実行速度が速い。
参考書
実践Rustプログラミング入門