golang/go の master ブランチに行われたコミットから個人的に気になったものをリストにしたものです。
前回作成したリストはこちら。
軽く説明を追加していますが勘違いや誤りがあるかもしれません。
Topic
- Go 1.18 Beta 1 がリリースされました。
Commits
2021-12-02
弱いメモリ一貫性モデル (メモリ参照命令が任意に並び変えられる) のアーキテクチャで実行した場合に GC が nil アクセスする不具合が修正されています。
関連 Issue を見ると以前から CI で発生していたようです。 1 2 3
2021-12-09
Go コンパイラ自体が Go で実装されていることは有名です。
この変更は開発環境のブートストラップに使う Go を Go 1.4 から Go 1.17 に変更するための準備です。 4
当初は Go 1.18 で切り替えたかったようですが今回は Go 1.17 がインストールされていればそれを使用し、なければ Go 1.4 を使用するようになっています。
Go 1.17 に変更することで Go 1.4 がサポートしていない環境での開発が可能になるほか、ブートストラップコードで新しい言語機能を使えるようになります。
型チェック時の依存関係グラフ計算が改善されています。
大きなパッケージでは影響が出てきそうです。 5
Go 1.18 は Go 1.17 よりビルドが約 15% 遅くなっているという記載がリリースノートに追加されています。
ジェネリクスサポートによるオーバーヘッドが速度低下の主原因で Go 1.19 で改善する予定とのことです。 6
ジェネリクスを使用しておらずビルド速度が問題になる場合は -G=0
オプションで回避できるようです。
2021-12-14
Go のソースに含まれている interface{}
がすべて any
に書き換えられました。
Go 1.18 の any
は interface{}
にエイリアスとして定義されているため既存コードへの影響はありません。 7
ただし、 gofmt -w -r 'interface{} -> any' src
で書き換えたためコメントが修正されていないという指摘がされているようです。 8
2021-12-15
Go 1.18 の API リストが作成されました。
ここまでのコミットが Go 1.18 Beta 1 に含まれているようです。
雑感
Go 1.18 リリースが近づいてきたこともあり不具合修正とドキュメント修正が中心になっています。
また、 Go チームは 2021 年 12 月 17 日~ 2022 年 1 月 4 日にかけて「静かな週」に入っていたためそれほど動きがなかったようです。