Go 1.21リリース、WASI(WebAssembly System Interface)サポート、実行時プロファイルでコンパイル最適化

2023年10月5日

Googleが中心となってオープンソースで開発されているGo言語の最新バージョン「Go 1.21」が先々月(2023年8月)リリースされました。

Go 1.21では、WebAssemblyをクロスプラットフォーム対応にするWebAssembly System Interface(WASI)が実験的にサポートされました。

また、実行時のプロファイル情報を基にコンパイルを最適化する「Profile-guided optimization」が正式機能となりました

WebAssembly System Interface(WASI)をサポート

Go言語は、WindowsやmacOS、Linux、FreeBSD、iOS、Androidなど、さまざまなOSやCPUに対応したバイナリを生成できる機能を備えており、2018年4月にはこれらに加えてWebAssemblyのサポートも開始しました。

参考:Go 1.11がリリース。WebAssembly対応を実装、モジュール機能も追加

しかしWebAssemblyでアプリケーションを作る場合、ほぼ必ずファイルシステムAPIなどOSへのアクセスなどが発生します。

アプリケーションからOSを呼び出すAPIはOSに依存するため、OSを呼び出すWebAssemblyアプリケーションは基本的にそのOSでしか動かないOS依存のアプリケーションになってしまいます。

そこで登場したのが、WebAssemblyのアプリケーションに対してOSのシステムコールを抽象化することでOS依存をなくし、ポータブルなWebAssemblyアプリケーションを実現する業界標準仕様のAPI「WebAssembly System Interface」(WASI)です。

WASI対応のWebAssemblyアプリケーションをWASI対応のWebAssemblyランタイム上で実行すれば、そのWebAssemlbyアプリケーションはOSにすることなく、WebブラウザでもWindowsやMacなどのデスクトップでも、Linuxなどのサーバサイドやエッジでも動くポータブルなもの(WebAssemblyバイナリ)となります。

すでにほとんどのスタンドアロンなWebAssemblyランタイムはWASIに対応しており、事実上の標準となっています。

Go言語のWASI対応で、特定のOSに依存しないポータブルな実装のWebAssemblyアプリケーション開発の実現が期待されます。

実際の実行時プロファイルを基にコンパイルを最適化

Go 1.21では、実行時のプロファイラ情報を用いてコンパイルを最適化し、実行速度の改善を図る「Profile-guided optimization」機能が正式版となりました。

参考:Go言語が実行時のプロファイラ情報でコンパイルを最適化する「Profile-guided optimization」パブリックプレビュー

Profile-guided optimizationとは、プログラムの実行時にどの関数が何回コールされたか、プロセッサやメモリをどのように使用しているかなど、実際のプログラムの実行状況をプロファイル情報として取得し、その情報を基にコンパイルを最適化する手法です。Feedback Directed Optimizationなどとも呼ばれます。

具体的には、何度も呼ばれる関数をインライン展開することで関数呼び出しのオーバーヘッドをなくす、変数の使用頻度によってレジスタへの割り当てを変更する、ループを展開する、などの処理がコンパイル時に行われます。

コンパイルの最適化手法としては以前から存在しており、例えばRustにはすでにProfile-guided optimization機能がありますし、GoogleはChromeブラウザをProfile-guided optimizationによって15%程度高速化したことを2016年に明らかにしています

Go 1.21のProfile-guided optimizationでは、典型的なアプリケーションでのCPU使用率が2%から7%程度改善すると説明されています。

あわせて読みたい

WebAssembly プログラミング言語 Go



タグクラウド

クラウド / AWS / Azure / Google Cloud
コンテナ / Docker / Kubernetes
クラウドネイティブ / サーバレス
クラウド障害 / 運用・監視

プログラミング言語 / 開発ツール
JavaScript / Java / .NET / WebAssembly
HTML/CSS / Web標準

アジャイル開発 / スクラム / DevOps / CI/CD
ソフトウェアテスト・品質
ローコード/ノーコード開発

データベース / RDB / NoSQL / 機械学習・AI
Oracle Database / MySQL / PostgreSQL
Office / 業務アプリケーション

ネットワーク / HTTP / QUIC / セキュリティ
OS / Windows / Linux / VMware
ハードウェア / サーバ / ストレージ

業界動向 / 働き方 / 給与・年収
編集後記 / 殿堂入り / おもしろ

全てのタグを見る

Blogger in Chief

photo of jniino

Junichi Niino(jniino)
IT系の雑誌編集者、オンラインメディア発行人を経て独立。2009年にPublickeyを開始しました。
詳しいプロフィール

Publickeyの新着情報をチェックしませんか?
Twitterで : @Publickey
Facebookで : Publickeyのページ
RSSリーダーで : Feed

最新記事10本