Golang の generics パフォーマンスがもの凄く改善されていた

Page content

以前 Golang 1.19.2 の generics のパフォーマンスを計測したところ、 generics を使ったケースと、自前で any からキャストするケースを比較すると、 なぜか自前で any からキャストする方が速くなるという謎の現象が発生していました。

前回の結果はここ。

../../2022/2022-10-15-go-generics/

go のバージョンが 1.20 に上ったので、 再度同じテストをして確認してみます。

確認方法

テストするコードは前回と全く同じものを使います。

このコードを go の 1.19.2 と 1.20 でビルドし、実行結果を比較します。

実行結果

実行結果が以下です。

  • go 1.19.2
1
2
generics	500500000000	time = 	2.132479
autoboxing	500500000000	time = 	0.9845109999999999
  • go 1.20
1
2
generics	500500000000	time = 	0.736408
autoboxing	500500000000	time = 	0.9796660000000001

これを見ると分かりますが、 なんと 1.20 では、 1.19.2 の時に比べて generics の処理が 約 3 倍高速化 されています。

これによって、自前で any からキャストするのではなく、 generics を利用した方が 2 割強速くなる ことが分かりました。

ということで、今回の実験結果を受けて、 LuneScript での golang の generics 対応を進めていきます。