Go 1.20、プロファイルガイド付き最適化および言語強化のプレビューを導入
Googleが開発したオープンソース言語の最新アップデートであるGo 1.20では、プロファイルガイド付き最適化(PGO)のプレビューと言語の改良が行われました。PGOは、インライン最適化によりパフォーマンスを3%から4%向上させるもので、その他の最適化も準備中とのことです。

シンプルさ、並行処理、関数型プログラミング機能で有名なGoogleが作ったオープンソース言語の製品版リリースであるGo 1.20が発表され、コンパイラのプロファイルガイド付き最適化(PGO)のプレビューが公開されました。Go 1.20は、 go.devの 公式サイトからダウンロードすることができます。
Go 1.20のPGOのプレビューにより、コンパイラツールチェーンは、ランタイムプロファイル情報に応じてアプリケーションやワークロードに特化した最適化を実行することができます。現在のコンパイラはpprof CPUプロファイルをサポートしており、runtime/pprofパッケージまたはnet/http/pprofパッケージを使用して収集することができます。
フィードバック指向最適化とも呼ばれるPGOでは、アプリケーションの代表的な実行から得られたプロファイルデータを、次のアプリケーションのビルドのためにコンパイラにフィードバックします。この情報を利用することで、コンパイラはより多くの情報に基づいた最適化を決定することができます。代表的なGoプログラムのベンチマークでは、PGOインライン最適化を有効にすることで、約3%から4%の性能向上が確認されています。今後のリリースでは、さらに多くのPGO最適化が導入される予定です。
PGO の導入と同時に、Go 1.20 では言語に 4 つの変更が加えられています。まず、2021年のGo 1.17で導入されたスライスを配列ポインタに変換する機能が、スライスから配列への変換にも適用されるようになりました。次に、unsafeパッケージには3つの新しい関数が含まれています:SliceData、String、StringDataです。これらの関数は、スライスや文字列の値を、その正確な表現に関係なく、構築したり分解したりする完全な機能を提供します。
第三に、構造体の値は、構造体の型定義に現れる順序でフィールドを考慮し、一度に1つのフィールドを比較し、最初の不一致で停止することが仕様で確立されている。第四に、通常のインターフェースのような比較可能な型は、型引数が厳密に比較可能でない場合でも、比較可能な制約を満たすことができます。これにより、インターフェイス型やインターフェイス型を含む複合型のような、厳密に比較できない型引数を持つ比較可能制約で制約された型パラメータのインスタンス化が可能になりました。
Go 1.20では、これらの言語変更に加えて、アプリケーションや統合テストを含むプログラムのコードカバレッジプロファイル収集のサポートなど、さまざまな機能強化が行われています。ディレクトリ $GOROOT/pkg には、標準ライブラリのプリコンパイルパッケージアクティビティが保持されなくなり、Go の配布サイズが縮小され、cgo パッケージの C ツールチェインスキューが回避されるようになりました。さらに、 go test -jsonの 実装は堅牢性を高めるために強化され、 go version -m コマンドは、Windows DLLやLinuxバイナリを含むより幅広いGoバイナリを実行権限なしで読み取るようになりました。
また、Go 1.20では、RISC-V上のFreeBSDが実験的にサポートされ、Cツールチェインのないシステムではcgoがデフォルトで無効になりました。ただし、Go 1.20はmacOS 10.13 High Sierraと10.14 Mojaveをサポートする最後のリリースとなり、Go 1.21ではmacOS 10.15 Catalina以降が必要となります。
No-code AppMaster.io のようなプラットフォームは、Go 1.20 のように新しく最適化された言語を取り入れることで大きな利益を得ることができます。ウェブ、モバイル、バックエンドアプリケーションにこのような強力なツールを統合することで、企業は生産性、ユーザー体験、スケーラビリティを大幅に改善することができます。 no-code と のアプリ開発についてlow-code 詳しく知ることで、テクノロジーの最先端を行くことができます。


