この記事は、2025年traP新歓ブログリレー25日目です。
これはRustにハマって半年のにわかによる過激思想の記事です
Rustとは?
Firefox(ブラウザ)やThunderbird(メールクライアント)などを開発しているMozillaが開発した言語。
現在はアマゾン、グーグル、ファーウェイ、マイクロソフトとともに設立したRust Foundationという非営利団体が管理している。
2010年7月7日に登場し、C/C++と同等の速度、所有権を用いた高度なメモリ・スレッド安全性が特徴。
プログラミング言語には珍しいくバージョンアップが多く、6週間間隔で行われている。
Rustをやるべき理由
C/C++のRustへの置き換えが進んでいる
今までは速度の観点からC/C++が様々な基礎システムとして使われてきました。
しかし、C/C++の根本的な言語仕様、主にメモリ関連の欠点によりバグ・セキュリティ等の多くの問題がありました。
これをRustで置き換えることによって、速度を維持しながら問題を解決しようとする流れが増えてきています。
Rustで置き換えが進んでいる例
- Linuxカーネル(なんかコミュニティが分断されそうらしい)
- Windowsカーネル(OSその2[記事])
- Android(OSその3[記事])
- PayPay(あの超有名決済アプリ[記事])
- Discord(Goからの切り替え[記事])
- AWS(あのあまぞんうぇぶさーびすですよ![記事])
- Chrome(フォント処理がRustに)
このように様々な有名サービスがRustを使い始めています。
これからははAIが得意なPythonとかWEB系よりRustの時代や!!
ライブラリが使いやすい
Pythonのpip install
のようなコマンドが言語標準で存在します。
つまり、Rustの開発団体がライブラリを集めたサーバーを運営しているということです。
さらに、コードにドキュメント用のコメントを書く機能があり、自動でライブラリのドキュメントを作成し、ライブラリをアップロードすると同時にドキュメントのサイトまで作られます。
もちろんドキュメントのサイトもRustの開発団体が運営しています。
ライブラリの導入方法も、ドキュメントの場所も書式も統一されていて、とても使い勝手が良いです。
言語仕様がいい
Rustの言語仕様や標準ライブラリの充実さがすごい良い。
ここでは書き切れないほどあるので、いくつか抜粋して紹介します。
生ポインタがない
(正確には"使うには危ないことをしているという宣言をする必要がある"が正しい)
プログラミング言語において生ポインタはバグの根源です。
特に関数の引数に生ポインタを使い、その引数にNULLポインタを渡すとデフォルト値を使ってくれるなんてモンを作ったら、のちのち阿鼻叫喚すること間違いなしです。
C/C++にも参照がありますが、Rustではそれが標準となっています。
参照は、指す先の値が存在している(有効な値である)ことを保証してくれているポインタです。
Rustには、NULLポインタもありな参照を標準で作ることができます。
文字列
C/C++の文字列はあくまで文字列操作に関するメンバ関数が豊富な8bit整数の可変長配列でしかありません。
Rustの文字列は、その内容が必ず有効なUnicode文字列であることを"言語仕様"で保証してくれています!
これほどありがたいことはないですね。
継承・テンプレートの代わりの概念、特性(トレイト)
オブジェクト指向を少しでも勉強したことのある人なら知っている"継承"。
これ、毒です。
継承はその性質上、基本的に木構造を強制されます。
これはよく考えてみればあまりにも非現実的です。
現実は共通の特性を持ったグループが多重に重なり合った、ベン図のような構造をしていることが多いです。
Rustにはその特性にあたる概念、トレイトしか存在しません。
このトレイトはかなり有用です。
C++にはテンプレートという、型を後で決める概念(ポリモーフィズム)がありますが、機能としては文字列の置き換えでしかありません。
つまり、実際にその関数がテンプレートの型に対してどのような条件を要求しているかは、コードをすべて読まないと何も分からないという欠点があります。
Rustではジェネリクスという名前で存在し、型が実装すべきトレイトを指定することができます。
例えば、ソートをする関数には比較可能な特性を表すOrd
トレイトを実装した型を渡せばいいというように、その関数を使う側から見ると、関数や構造体の定義を見れば条件が一目瞭然でとても良いです。
文字だけで説明するのは難しいですが、実際に勉強して使ってみれば、継承とテンプレートがいかに欠陥を抱えていて、トレイトが素晴らしい概念であるか分かるでしょう。
Rustの始め方
公式サイトへGO!
出来ればNeovimも一緒に始めて…
明日の投稿者は@METCH722、@lemon、@sumire0517、@Elmer、@gurukun41、@otimaです。