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
generics 500500000000 time = 2.132479
autoboxing 500500000000 time = 0.9845109999999999
- go 1.20
generics 500500000000 time = 0.736408
autoboxing 500500000000 time = 0.9796660000000001
これを見ると分かりますが、 なんと 1.20 では、 1.19.2 の時に比べて generics の処理が 約 3 倍高速化 されています。
これによって、自前で any からキャストするのではなく、 generics を利用した方が 2 割強速くなる ことが分かりました。
ということで、今回の実験結果を受けて、 LuneScript での golang の generics 対応を進めていきます。