Rust (プログラミング言語)
Rustは2016〜2022年に渡ってStack Overflow Developer Surveyで「最も愛されているプログラミング言語」で一位を獲得し続け、プログラマの好意的な評価は多い。
一方で、Rustは学習難易度が高い言語とも考えられている。多くのRust初学者のプログラマにおいて、自身が正しいと思って書いたソースコードのコンパイルに対してコンパイラ(ボローチェッカー)がエラーを検出する、「ボローチェッカーとの戦い」(fighting with the borrow checker)が発生しがちである。小さなアプリケーションの実装について同時期に言語開発されているGo言語と比較した場合、Rust言語よりGo言語の方が開発効率が良いという評価がある。学習難易度の高さは開発チームも認識しており、2017年ロードマップでは学習曲線の改善を目的として挙げていた。
所有権(英: Ownership)はリソース管理の中心を成す重要な概念である。一つのリソースは一つの所有者(変数やブロック)のみに関連付けされるという制約がRust特有のリソース管理機能として存在する。これは、あるリソースの所有権はある所有者(owner)が持っている、のように表現される。同時に、リソースの所有権を複数の変数が持つことは出来ない。
これはC++のスマートポインタの一種であるunique_ptrの振る舞いに似ている。
「Hello, world!」を標準出力に出力するHello worldプログラム。
Rustの基礎的な文法はC言語やC++に似て、波括弧で囲まれたブロックコード{ ... }、if, else, whileなどの制御フローキーワードを持つ。 全てのC言語やC++のキーワードが実装されているわけではなく、一方で幾つかのRustの制御命令(パターンマッチのためのmatch)はそれらの言語を習得したプログラマにとっては馴染みが少ないものも存在する。Rustの命令文は、表面的なC言語やC++との文法の類似性にもかかわらず、意味論的にはML系言語の命令式に近く、関数本体のほぼ全ての部分は制御フロー演算子でさえ「文(statement)」ではなく「式(expression)」である。例えば普通のif式もC言語で言う所の条件演算子であり、if式の結果として返り値を返す。
ブロックコード内の命令文のセパレータにはセミコロン(;)を用いるが、C言語のそれと異なりRustのセミコロンは直前の命令文がブロックコードで括られる式の途中式であることを宣言するためのものである。セミコロンを末尾に置かない命令文はブロックコードの最終的な評価式として扱われ、その式の結果がブロックコードの外へ戻り値として返される。これは関数定義であれば、結果を返す箇所にはセミコロンをつけない。結果が不要ならばセミコロンによって明示的に捨てるのである。そして結果を返さないならば、それは文と呼ばれる。
2006年、Mozillaで働いていたグレイドン・ホアレは現代のインターネット環境で高い並行性と高い安全性が求められるシステムプログラミング言語としてC言語やC++に代わりうるプログラミング言語 Rust言語の開発に着手した。MozillaがRustの開発に関わりはじめたのは2009年で、Rustは2010年のモジラ・サミットで公に姿を表した。RustソースコードをコンパイルするRustコンパイラは、初期の頃はOCaml言語で作られたコンパイラ(rustboot)が用いられていたが、2010年にはRust言語自身でRustコンパイラを作るセルフホスティングへ移行したコンパイラ(rustc)の開発が始められ、翌年にはブートストラップ問題を解決した最初の完動品が完成した。この時よりRustコンパイラはコンパイル基盤にLLVMを用いたものとなった。