Rustが流行ってほしい


Rustはゲーム開発に向いている理由

省メモリ

メモリや容量はゲーム開発をする上で一番大切な概念です。以前の記事を参照してください。ゲーム開発における言語はC,C++,C#,Python,Luaが殆ど全てといっていいほどです。Pythonは遅いですが、オブジェクト指向で書けるスクリプト言語且つ演算子オーバーロードが利用でき且つ省資源であることを考えると良い選択肢であるということを示しています。それ以上に遅い言語はPHP,ShellScript,PowerShell等の特定の物に特化した有名言語,scratch等の子ども用の言語くらいだと言われています。

高速

Rustの速度はCと同じかそれよりやや遅い、C++(の多くのコンパイラ)より速いのでとても高速に動作します。MLのようなマクロや束縛等で最適化しやすいためという理由もあります(高速なライブラリの、readonlyを利用したインラインconst化)。C++のような"std","演算子オーバーロード",C#のような"const","for","use","ジェネリクス","型推論"等のゲームエンジニアがよく利用するであろう機能が存在します。stringについては組み込み型(str)とstd::string::Stringが存在します。C#もGCを省いた速度(GCが無ければ起動3秒後以降、C++の1.1倍くらいしか速度が変わらない)では問題がないですが、いつ起こるかわからないのでそこら辺の管理が大変です。またC#ほどではないにしろJava並みに可読性が高い且つ、C++やC#の慣れている人だと学習コストが低いのでメリットが多いです。

バグが起こりにくい

これは意外に重要です。よくゲームで実行時バグだったりクソゲーだったりも多いですが、その原因の多くはバグを生みやすい自由度にあります。多くは、マクロやtemplateや多重継承やgotoやdelateし忘れ等がいい例です。また、ゲームエンジンを使わない多くの場合組み込みエンジニアのようにアセンブラ他でハードウェア毎の実装をしなくてはなりません。
DirectX >>> ハードウェア->抽象化->プログラム->具体化->ゲーム->抽象化->プログラム->具体化->ハードウェア
これは多くの場合ゲームを作ることが目的になり、(ほんの少数の天才以外は)感性で面白いと感じるゲームを作ることが後回しになることが多かったのでゲームエンジンが生まれました。一つの文やオブジェクトで具体→抽象→具体と三段階踏まないとならないのはとても頭を使います。
UE4(Unity) >>> プログラム->具体化->ゲーム->抽象化->プログラム
こうなると理性に使っていたリソースを感性に使うことができるので、作っている途中にクソゲーだと気が付きわかりやすいので、客からの信用を落とさずに済みます。また、バグの多くもエンジン側によって最適化処理されているためマシです。但し、これにも問題があります。マクロの使用や無駄なtemplateの使用や多重継承やgotoの使用やdelateし忘れが発生している可能性が秘めているという点です。これを解決するであろうRustは非常に純粋で美しくC++erに優しい仕様となっています。これら問題は全てRustが解決し、ifは式、安全で高速、変数は束縛(下で詳しく話します。)というゲーム利用に最適化された機能がある点にも注目できます。

デフォルトがReadOnly

グーグルのC++ガイドラインで

理にかなっているのならば、常にconstを使ってください。 C++11では、いくつかのconstは、constexprを使うほうがよりよい選択です。

土方プログラマーでなければ、プログラムを書いているとconst autoだらけになることも多いのではないでしょうか?const_castを使うことも多いので、束縛は重要です。また、ReadOnlyの方が大胆な最適化が可能です。従って今後はゲームにRustを使うことになるのではないかと思っています。また、Rustの束縛はreadonlyを利用したインラインconst化で高速です。