Go 1.26 リリース
Go 1.26 is released by Carlos Amedee, on behalf of the Go team
本日、GoチームはGo 1.26をリリースしました。 バイナリアーカイブとインストーラーはダウンロードページから入手できます。
言語仕様の変更
Go 1.26では、言語の構文と型システムに2つの重要な改良が加えられました。
1つ目は、新しい変数を作成する組み込み関数newです。
これまでは型のみを指定できましたが、今後はオペランドとして式を指定できるようになり、変数の初期値を指定できます。
簡単な例を挙げます。 次のようなコードがあるとします。
x := int64(300)
ptr := &x
次のように簡略化できます。
ptr := new(int64(300))
2つ目は、ジェネリック型が自身の型パラメータリストの中で自分自身を参照できるようになったことです。 この変更により、複雑なデータ構造やインターフェースの実装が簡単になります。
パフォーマンスの向上
これまで実験的機能だったGreen Teaガベージコレクタが、デフォルトで有効になりました。
ベースラインのcgo呼び出しのオーバーヘッドが約30%削減されました。
コンパイラは、より多くの状況でスライスのバッキングストアをスタック上に確保できるようになり、パフォーマンスが向上しました。
ツールの改善
go fixコマンドはGo analysisフレームワークを使うように全面的に書き直され、コードが言語や標準ライブラリの新しい機能を活用できるように安全な修正を提案するアナライザーである「モダナイザー」を数十個含むようになりました。
また、//go:fix inlineディレクティブが付与された各関数へのすべての呼び出しをインライン化しようとするinlineアナライザーも含まれています。
これらの機能については、近日公開予定の2本のブログ記事で詳しく取り上げます。
その他の改善と変更
Go 1.26では、Go 1.25と比べてツール、ランタイム、コンパイラ、リンカ、標準ライブラリにわたる多くの改善が加えられています。
これには、crypto/hpke、crypto/mlkem/mlkemtest、testing/cryptotestという3つの新しいパッケージの追加が含まれます。
また移植版ごとの変更やGODEBUG設定の更新もあります。
Go 1.26の追加機能のいくつかはまだ実験段階にあり、明示的にオプトインした場合にのみ利用可能になります。 特に次のものがあります。
実験的な
simd/archsimdパッケージは、「単一命令・複数データ」(SIMD) 演算へのアクセスを提供します。実験的な
runtime/secretパッケージは、主に暗号関連の秘密情報を扱うコードで使われる一時変数を安全に消去するための機能を提供します。runtime/pprofパッケージの実験的なgoroutineleakプロファイルは、リークしたゴルーチンを報告します。
これらの実験的機能は、いずれ将来のGoのバージョンで一般提供される見込みです。 ぜひ一足先に試してみてください。 皆さんのフィードバックを心よりお待ちしています。
Go 1.26における追加、変更、改善の完全なリストについては、Go 1.26リリースノートを参照してください。
今後数週間にわたり、Go 1.26に関連するトピックのいくつかを詳しく取り上げるフォローアップのブログ記事を公開していきます。 また後日ご確認ください。
コードを書いたり、バグを報告したり、実験的な追加機能を試したり、フィードバックを共有したり、リリース候補版をテストしたりして、今回のリリースに貢献してくださったすべての方々に感謝します。 皆さんの努力のおかげで、Go 1.26はできる限り安定したものになりました。 いつものように、何か問題に気づいた場合はイシューを報告してください。
新しいリリースを楽しんでいただければ幸いです。
By Carlos Amedee, on behalf of the Go team