Go 1.21 が正式にリリースされました。
このリリースの変更のほとんどは、ツールチェーン、ランタイム、およびライブラリの実装に焦点を当てています。いつものように、このリリースでは Go 1 の互換性に関する約束が維持されていますが、実際、Go 1.21 ではその約束が改善されています。開発チームは、ほぼすべての Go プログラムが引き続き以前と同様にコンパイルおよび実行されることを期待しています。
さらに、Go 1.21 ではバージョン番号に小さな変更が加えられています。
Go 1.N は、これまで Go 言語のバージョン全体とリリース シリーズ、およびシリーズの最初のリリースを指すために使用されてきました。Go 1.21 以降、最初のリリースはGo 1.N.0になりました。最新リリースは Go 1.21 言語とその初期実装である Go 1.21.0 リリースです。
このような ツールgo version
では、バージョン番号が「go1.21.0
」として表示されます。新しいバージョン番号の詳細については、「Go ツールチェーン」ドキュメントの「Goバージョン」を参照してください。
ダウンロードアドレス: https://go.dev/dl/
ツールチェーンの改善
- Profile Guided Optimization (PGO) 機能は正式に GA されました。
1.20 でプレビュー段階にあったEnable Profile Guided Optimization (PGO) 機能が正式に GA になりました。default.pgo
メイン パッケージ ディレクトリに名前付きのファイルがある場合、go
コマンドはそれを使用して PGO ビルドを有効にします。
プロファイルに基づく最適化 (PGO) は、コンピューター プログラミングにおけるコンパイラーの最適化手法であり、構成ファイルに基づく最適化に変換されます。
PGO は次のようにも知られています。
プロフィールに基づくフィードバック (PDF)
フィードバック指向の最適化 (FDO)
その原理は、コンパイラがプログラムの実行時プロファイリング情報を使用して高品質のコードを生成し、それによってプログラムのパフォーマンスを向上させることです。
一般的なコンパイラ最適化手法として、PGO は特定の言語に限定されません。たとえば、 Rust コンパイラも PGO の使用を検討しており、Microsoft は LTO+PGO を使用して Linux カーネルを最適化しています。
Go では、PGO の元の提案では、プロファイルに基づく最適化 (PGO) のサポートを Go GC ツールチェーンに追加し、ツールチェーンがランタイム情報に基づいてアプリケーション固有およびワークロード固有の最適化を実行できるようにすることが提案されていました。
Go 開発チームは、さまざまな Go プログラムに対する PGO の影響をテストし、パフォーマンスが 2 ~ 7% 向上したことがわかりました。
言語の変更
- 新しい組み込み関数を追加しました: min、max 、 clear
- 仕様内の型推論の説明を拡張および明確にするなど、ジェネリック関数の型推論にいくつかの改善を加えました。
- 将来のリリースでは、開発チームは Go プログラミングで最も一般的な問題の 1 つであるループ変数キャプチャに対処する予定です。Go 1.21 にはこの機能のプレビューが付属しており、環境変数を使用してコード内でこの機能を有効にできるようになりました。
詳細を表示するにはここをクリックしてください
新しい標準ライブラリを追加する
-
log/slog パッケージ: 構造化ログ用
-
スライス パッケージ: あらゆる要素タイプのスライスに対する一般的な操作のために追加されました。このパッケージは、sort パッケージよりも高速で人間工学に基づいたものです。
-
マップパッケージ: あらゆる種類のキーと値に対する一般的な操作用
-
cmp パッケージ: 注文された値を比較するためのパッケージ
パフォーマンスを最適化する
PGO が有効になっている場合のパフォーマンスの向上に加えて、次のことが行われます。
- Go コンパイラ自体は、PGO を有効にして 1.21 で再構築されているため、ホスト アーキテクチャに応じて Go プログラムを 2 ~ 4% 高速にビルドできます。
- ガベージ コレクターの調整により、一部のアプリケーションではテール レイテンシーが最大 40% 削減される可能性があります
- ランタイム/トレースを使用してトレースを収集すると、 amd64 および arm64 で発生する CPU オーバーヘッドが大幅に減少します。
WASIのサポート
Go 1.21 には 、 WebAssembly System Interface (WASI) のプレビュー 1 ( GOOS=wasip1
、GOARCH=wasm
) が実験的にサポートされています。
より一般的な WebAssembly (WASM) コードの記述を容易にするために、コンパイラーは、WASM ホストから関数をインポートするための新しいディレクティブもサポートしています go:wasmimport
。
参考文献