2月12日、GoチームはGo 1.24をリリースした。
Go 1.24は、ダウンロードページから入手でき、言語仕様やパフォーマンス、ツール、WebAssemblyなど多岐にわたる改良が含まれている。
言語面での変更
まず言語面では、ジェネリック型エイリアスが正式にサポートされた。Goの言語仕様によると、従来のtype alias文法が拡張され、型パラメータを伴うエイリアス宣言が可能になっている。すなわち、type MyAlias[T any] = ...
のような構文で、特定の型を複数のパラメータによって柔軟に扱うことができるようになった。これは、ジェネリック型を定義型(type MyType[T any] struct { ... }
など)として宣言するケースと同等の方法でエイリアスにも型パラメータを付与できるようにするものだ。
パフォーマンスの改善
パフォーマンス面では、ランタイムに多数の改善が入り、代表的なベンチマーク群で平均2〜3%のCPUオーバーヘッド削減を実現した。新たにSwiss Tablesに基づくmap
実装が導入されたほか、小さなオブジェクトのメモリアロケーションやランタイム内部のミューテックス実装の効率化が図られている。
ツール面での改善
ツール面では、以下のような改善が盛り込まれた。
- `go get -tool`を使ってツール依存を管理できる機能が追加された。`tool`ディレクティブによってモジュールにツール依存を記載し、`go tool [tool name]`で呼び出す仕組みである。
- `go vet`サブコマンドに新たに`test`アナライザが加わった。テスト、ファズ、ベンチマーク、例示用コードにおけるよくあるミスを報告する。
WebAssembly向け機能
WebAssembly向け機能としては、go:wasmexport
ディレクティブの追加により、GoプログラムからWebAssemblyホストへ関数をエクスポートできるようになった。また、GoプログラムをWASIのreactor/libraryとしてビルドすることもサポートされている。
そのほか詳細や追加の変更点はGo 1.24のリリースノートを参照していただきたい。