The Go Blog (Go ブログ)
Go 1.21 リリース候補
Go 1.21 の最初のリリース候補 (RC) が本日、ダウンロードページで公開されました! Go 1.21 には、新機能と改良点が満載です。RC(リリース候補)を入手することで、早期に試用し、ワークロードで試して、最終リリース(8月に予定)前に問題を報告できます。Go 1.21 の注目すべき変更点と機能を以下に示します。完全なリストについては、完全なリリースノートを参照してください。
(Go 1.21 の最初の RC は、go1.21rc1
のタグ付け後にバグが見つかり修正されたため、go1.21rc2
と呼ばれています)
ツールの改善
- 1.20 でプレビューを発表したプロファイルに基づく最適化 (PGO) 機能が正式に利用可能になりました! メインパッケージのディレクトリに
default.pgo
という名前のファイルが存在する場合、go
コマンドはそれを使用して PGO ビルドを有効にします。詳細については、PGO ドキュメントを参照してください。さまざまな Go プログラムに対する PGO の影響を測定した結果、パフォーマンスが 2~7% 向上しました。 go
ツールは、後方および前方言語互換性をサポートするようになりました。
言語の変更
- 新しい組み込み関数:min、max および clear。
- ジェネリック関数の型推論に関するいくつかの改善。 仕様の型推論の説明が拡張され、明確化されました。
- Go の将来のバージョンでは、Go プログラミングで最も一般的な落とし穴の 1 つであるループ変数のキャプチャに対処する予定です。Go 1.21 にはこの機能のプレビューが付属しており、環境変数を使用してコードで有効にすることができます。詳細については、LoopvarExperiment wiki ページを参照してください。
標準ライブラリの追加
- 構造化ログのための新しい log/slog パッケージ。
- 任意の要素型の スライスに対する一般的な操作のための新しい slices パッケージ。これには、一般的に sort パッケージよりも高速で人間工学に基づいたソート関数が含まれています。
- 任意のキーまたは要素型のマップに対する一般的な操作のための新しい maps パッケージ。
- 順序付けられた値を比較するための新しいユーティリティを備えた新しい cmp パッケージ。
パフォーマンスの向上
PGO を有効にした場合のパフォーマンス向上に加えて
- Go コンパイラ自体が 1.21 の PGO を有効にして再構築されたため、ホストアーキテクチャに応じて Go プログラムのビルド速度が 2~4% 向上しました。
- ガベージコレクターのチューニングにより、一部のアプリケーションではテールレイテンシが最大 40% 削減される場合があります。
- runtime/trace でトレースを収集する場合の CPU コストが、amd64 および arm64 で大幅に削減されました。
WASI への新しい移植
Go 1.21 は、WebAssembly System Interface (WASI)、プレビュー 1 (GOOS=wasip1
、GOARCH=wasm
) のための実験的な移植を追加します。
より一般的な WebAssembly (WASM) コードの記述を容易にするため、コンパイラは WASM ホストから関数をインポートするための新しいディレクティブ go:wasmimport
もサポートしています。
Go 1.21 RC をダウンロードして、お試しください! 問題が発生した場合は、問題を報告してください。