🐥

チェスのプログラムを作って各プログラム言語の比較評価をした

2025/01/07に公開

これは、とある方が7つのプログラム言語を用いて、同じチェスのプログラムを作成した話です。
7つの言語とは、C++C#GoZigOdinPythonRustの7つの言語を用いて、それぞれチェスプログラムを作成して比較した結果を動画にまとめています。
何故、各言語で評価したのかは、それぞれの言語でのプログラム生産コストとパフォーマンスを評価するためです。
https://www.youtube.com/watch?v=cFNBIYwht8o
0:00 イントロ
1:18 アルゴリズムの説明
6:10 C++言語のコード評価
9:25 C#言語のコード評価
10:48 Go言語のコード評価
12:36 Zig言語のコード評価
15:10 Odin言語のコード評価
16:14 Python言語のコード評価
18:15 Rust言語のコード評価と不満
23:10 結論

0.アルゴリズムの説明

通常は、ボードの配列は8x8の64配列を設定し、各駒には定数を設けて設定を行うのですが、今回のアプローチは、ビットボードを使用して行っています。
つまり、u64変数をボードとして見立て、それぞれに駒の位置を示す手法を取っています。

1.各言語の評価

各言語毎に内容を要約してみました。

1-1.C++言語の評価

グローバル変数と構造体を用いて作成してみた

1-2.C#言語の評価

ヒープを使用せずに、スタック上にデータを置いている。

1-3.Go言語の評価

Goはガベージコレクション機能を差し引いても、コードはシンプルで、1-2時間でコーディングが可能で、初心者にもおすすめ出来る言語であると思う。

1-4.Zig言語の評価

Zigは非常に厳密な型システムであるため、ビット操作が面倒であった。

1-5.Odin言語の評価

Odinは最も簡単に作成し動作する事ができた。
基本Goと同じなのでGo言語のコードをコピーして貼り付けただけで動作する。
Odinの奇妙なところは定数の設定が何か変なところぐらい。

1-6.Python言語の評価

Pythonは全然好きじゃないが、セミコロンや中括弧を使わない所が好き。
Pythonはu64型変数を扱えないが、numpyが固定長uint64を扱えるのでnumpyを使って動作させている
動作自体は遅かったが、コーディングは再帰も含めて正常に動作する

1-7.Rust言語の評価

Rustは愚痴しか出ない。
コーディングに3日かかり、他の言語に較べて扱いずらい。
Rustはデバックモードでのスタックサイズが限られていて、これが非常に愚かだ。
安全な言語なのにスタックサイズに制限がある事は愚かだ。
スタックのオーバーフローが発生し、後にも先にも進まない。

2.評価結果

2-1.作った各言語のコーディングのしやすさ比較

Go言語は、操作も楽だし、直ぐに作成する事が出来た。
Odin言語は、Go言語と似ているため、Go言語を作成した後、コピペすれば直ぐに作成できた。
Rust言語は、コーディングに3日を要した。(理由は言語評価を参照)

2-2.パフォーマンス順

順位 言語 速度(ミリ秒)
1 C++ 347
2 Zig 482
3 Rust 528
4 Odin 534
5 Go 730
6 C# 1315
7 Python 1312888


Pythonはグローバル変数の扱いに問題があり、かつガベージコレクションなので、極端に遅い結果になった。RustOdinZigでは、これら3つのパフォーマンスを考えれば、Odinプログラムがもっとも使いやすく楽にコーディングを行えた。
Javaはunsigned logをサポートしていない、64ビット整数型は扱えるが、unsignedはサポート外であるため、評価対象外である。同様にNimも同じ。

おわりに

こんな事を書いたら、後からクレームのコメントがバンバン来るだろうなとは思ってますが、この動画で私が共感したのは、Rustは糞だと言う事です。
一概に、Rustが早くて安全と言う事は、決してありません。
以前からエンジニアに愛されているプログラミング言語とありますが、本当かよ?っていつも思ってますし、コーディングのしずらさを含めて言うなら、Rustは覚えるに値しない言語だと、個人的には思います。
Rustのエンジニアさん、ボロクソに言って、ごめんなさい。

Discussion