Go 1.21 がリリースされました!
Go 1.21 is released! by Eli Bendersky, on behalf of the Go team
本日、Goチームは Go 1.21 をリリースできることを大変嬉しく思います。ダウンロードページ から入手できます。
Go 1.21 には新機能や改善が満載です。ここでは注目すべき変更点をいくつか紹介します。 全リストについては リリースノート を参照してください。
ツールの改善
- Go 1.20 でプレビューとして発表したプロファイル誘導最適化
(Profile Guided Optimization、PGO) 機能が、正式に一般提供されました。メインパッケージの
ディレクトリに
default.pgoという名前のファイルがあると、goコマンドはそれを使ってPGOビルドを 有効にします。詳細は PGOのドキュメント を参照してください。幅広い Goプログラムに対してPGOの効果を計測したところ、2〜7%のパフォーマンス向上が見られました。 goツールは、後方および 前方の言語互換性をサポートするようになりました。
言語の変更
- 新しい組み込み関数として min、max と clear が追加されました。
- ジェネリック関数の型推論にいくつかの改善が加えられました。 言語仕様における型推論の説明も拡充され、明確になっています。
- 将来のGoのバージョンでは、Goプログラミングで最もよくあるつまずきの一つである ループ変数のキャプチャに対処する予定です。Go 1.21には、 この機能のプレビューが含まれており、環境変数を使ってコード内で有効にできます。詳細は LoopvarExperiment のwikiページ を参照してください。
標準ライブラリへの追加
- 構造化ロギングのための新しい log/slog パッケージ。
- 任意の要素型のスライスに対する一般的な操作のための新しい slices パッケージ。これには、sort パッケージよりも概して高速で扱いやすい ソート関数が含まれています。
- 任意のキー型や要素型のマップに対する一般的な操作のための新しい maps パッケージ。
- 順序付け可能な値を比較するための新しいユーティリティを備えた新しい cmp パッケージ。
パフォーマンスの改善
PGOを有効にした場合のパフォーマンス向上に加えて、次のような改善もあります。
- Goコンパイラ自体もPGOを有効にして1.21向けに再ビルドされており、その結果、ホストアーキテクチャに 応じて2〜4%速くGoプログラムをビルドできるようになりました。
- ガベージコレクタのチューニングにより、アプリケーションによってはテールレイテンシが最大40% 削減される場合があります。
- runtime/trace によるトレースの収集は、amd64とarm64において 大幅にCPUコストが小さくなりました。
WASIへの新しい移植
Go 1.21では、WebAssembly System Interface (WASI) Preview 1
(GOOS=wasip1、GOARCH=wasm) 向けの実験的な移植が追加されました。
より汎用的なWebAssembly (Wasm) コードを書きやすくするため、コンパイラはWasmホストから関数を
インポートするための新しいディレクティブ go:wasmimport にも対応しています。
コードを書き、バグを報告し、フィードバックを共有し、リリース候補をテストすることでこのリリースに 貢献してくださったすべての方に感謝します。皆さんの努力のおかげで、Go 1.21はできる限り安定した ものになりました。いつも通り、何か問題に気づいた場合はIssueを作成してください。
Go 1.21をお楽しみください!
By Eli Bendersky, on behalf of the Go team