Open7

Go 1.21 Release Noteを読む

zztkmzztkm

https://tip.golang.org/doc/go1.21
https://go.dev/blog/go1.21rc

Tool improvements

PGO

PGO 抑えてなかった。。

フィードバック指向最適化(FDO)としても知られるプロファイル・ガイデッド・オプティマイゼーション(PGO)は、アプリケーションの代表的な実行から得られた情報(プロファイル)を、次のビルドのためにコンパイラーにフィードバックし、コンパイラーはその情報を使用して、より多くの情報に基づいた最適化の決定を行うコンパイラー最適化手法です。例えば、コンパイラーは、プロファイルが頻繁に呼び出されることを示す関数を、より積極的にインライン化することを決定するかもしれません。
https://go.dev/doc/pgo

これ本番で動かした結果を常にフィードバックできる環境を作る必要があるわけだ。

Notes にも書いてあるとおり、プロファイルを継続的に収集するサービスを立てて、収集してマージしたプロファイルをPGOに活かすという手法が考えられるのか。良さそうや。

これは別途色々試してみよう。

zztkmzztkm

Language changes

New built-in functions: min, max and clear.

今まで欲しくなったケースにあってないけど、値を比較してほしい方を取るという操作がシンプルに書けるのは良さそう。

loop variable capture

あとで読む: https://github.com/golang/go/wiki/LoopvarExperiment

zztkmzztkm

Standard library additions

log/slog がきた!

https://pkg.go.dev/log/slog
公式が提供してくれるおかげで zerolog 使うとか zap 使うとかとりあえずを迷わなくなるので良さげ。
自分の管理してるアプリケーションで試してみよう。

slice, maps, cmp

良さそう。この手の操作を一般化してくれたのは嬉しい。
別途読む: https://pkg.go.dev/slices

zztkmzztkm

Improved performance

パフォーマンスの向上
PGOを有効にした場合のパフォーマンス向上に加え、PGOを有効にした場合のパフォーマンスが向上しました:
・Goコンパイラ自体が1.21でPGOを有効にして再構築され、その結果、ホスト・アーキテクチャに応じて、Goプログラムのビルドが2~4%速くなりました。
・ガベージコレクタのチューニングにより、アプリケーションによってはテールレイテンシが最大40%短縮される場合があります。
・runtime/trace によるトレース収集の CPU コストが、amd64 および arm64 で大幅に削減されました。

パフォーマンスチューニングにおける重要な「推測するな、計測せよ」を実現するためにPGO活用できたら良いな。色々試して深めていく価値があると思った。

zztkmzztkm

:A new port to WASI

Go 1.21 は、WebAssembly System Interface (WASI), Preview 1 (GOOS=wasip1, GOARCH=wasm)の実験的ポートを追加しました。
より一般的な WebAssembly (WASM) コードを書きやすくするために、コンパイラは WASM ホストから関数をインポートするための新しいディレクティブ go:wasmimport もサポートしています。
Go 1.21 RCをダウンロードして試してみてください!何か問題があれば、issueを提出してください。

WASI の対応進んでるっぽい。Wasmerも Edge とかも楽しみだし。今のうちからたくさん遊んでおきたい。Goさいこー!