プロファイルガイド付き最適化(PGO)機能などが追加された Go 1.20 がリリースされました
Google が開発しているプログラミング言語 Go の最新版,Go 1.20 がリリースされました.1.19 から6ヶ月ぶりのリリースとなる Go 言語ですが,今回のアップデートでは,プロファイルガイド付き最適化(PGO; Profile Guided Optimizations) など,大きな機能が追加されています.
今回のアップデートでは,主にツールチェインやランタイム,ライブラリ実装が更新されています.主な更新内容は,以下の通りです.
- Windows 7,8,それに Windows Server 2008,2012 のサポートは,今回のアップデートで最後になります.次回リリースとなる Go 1.21 以降では Windows 10 または Windows Server 2016 以降がサポート対象になります.
- macOS 10.13 (High Sierra) と 10.14 (Mojave) のサポートは,今回のアップデートで最後になります.次回リリースとなる Go 1.21 以降では macOS 10.15 (Catalina) 以降がサポート対象になります.
- RISC-V 版の FreeBSD のサポートが試験的に追加されました.
- Core ライブラリの機能追加
- crypto/ecdh パッケージを追加.明示的に ECDH (Elliptic Curve Diffie-Hellman key exchanges; 楕円曲線ディフィー・ヘルマン鍵共有)がサポートされました.
- 異なる複数のエラーをひとまとまりに扱えるようになりました.[]error を返す Unwrap メソッドなどが利用できます.
- その他,多くの機能追加と改善が行なわれています
- ガベージコレクタ (GC; Garbage Collector) の時間・空間効率と CPU 効率が改善されました.
- Linux 環境でリンカがリンク時に glibc と Musl の動的インタプリタを選択するようになりました.
- Windows 環境で LLVM ベースのリンカがサポートされるようになりました.
- プロファイルガイド付き最適化(PGO)機能がプレビューサポートされています.
- ビルド関係のツールチェインで,"-cover" フラグがサポートされました.これは,実行時のカバレッジを計測するコードをサポートするためのフラグです.
上記にもある通り,今回のバージョンから,プロファイルガイド付きで最適化する(PGO)オプションが,プレビューサポートされるようになりました.
PGO というのは,実行モジュールを実際に動かして,実行時によく使われる命令やメモリ領域の統計をとり,その統計に基づいて実行モジュールを最適化する手法のことをいいます.一般的には,よく使われるメソッドをインライン展開(使われる場所に直接メソッドの内容を書き出すこと)したり,if-文でほとんど同じ分岐しかしない場合に,よく分岐する方のコードブロックを優先的に実行するように,順序付けて配置するような最適化を行います.
Go 言語でどのような PGO を行なっているかは,該当のドキュメントを参照しましょう.