BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース Go 1.12、ランタイム性能とモジュールサポートを改善

Go 1.12、ランタイム性能とモジュールサポートを改善

原文(投稿日:2019/03/19へのリンク

Goの最新リリース、バージョン1.12では、言語に対する構文上の変更はなく、ランタイム性能、ツールチェーン、モジュールシステムの改善に焦点が当てられている。加えて、TLS 1.3のオプトインサポートと、macOSおよびiOSのサポート改善を提供する。

Go 1.12の最も重要な変更は、メモリ割り当て/解放の処理方法に関するものだ。特に、ガベージコレクションのスイープステージにおける性能改善をもたらし、ヒープの大部分が生存のままである場合、最初から最後まで全メモリをスキャンして解放できるブロックを特定する。これにより、ガベージコレクション直後に新しいメモリを割り当てるのに要する時間を削減する。加えて、ガベージコレクタはメモリをより積極的にOSに解放するようになり、プログラムの全体的なメモリフットプリントが改善されている。この挙動は特に、既存のヒープ領域を再利用できない大きな割り当ての後に強制される。

この他、Goランタイムにはタイマーとデッドラインコードの改善によるネットワーク接続デッドラインの素早い処理、cpu.extension=off環境変数によるオプショナルCPU命令セット拡張の使用無効化のサポート、大きなヒープ割り当てを使用するプログラムのメモリプロファイル精度向上が含まれている。

Go 1.12では、モジュールサポートもいくつかの点で改善されている。Go 1.11で導入された新しいモジュールシステムは、従来のGOPATHによるアプローチと共存している。移行を容易にするため、Go 1.11は、モジュールのオン・オフを切り替えるGO111MODULE環境変数と、GOPATH/srcの外側のディレクトリツリーでgoコマンドが実行され、そのルートがgo.modファイルを含んでいる場合は常にモジュールシステムを使おうとするデフォルトのautoモードを導入した。Go 1.12はさらに一歩進めて、たとえgo.modファイルが存在しなくても、いくつかのgoコマンドをモジュールモードで実行できる。加えて、Go 1.12では、モジュールシステムの実装にいくつか修正が入っている。

先に述べたように、コンパイラツールチェーンも改善されており、より積極的な関数のインライン化、使用する言語バージョンを指定する新しい-langフラグ、デバッグ情報の改善、Goとアセンブリ関数で使われている異なる呼び出し規約によるABIレベルでの潜在的な破壊的変更が含まれている。

Go 1.12では、TLS 1.3のサポートも導入された。これはGODEBUG環境変数でtls13=1を使用することで有効化できる。TLS 1.3は、ConnectionStateのTLSUniqueと再ネゴシエーションを除く全てのTLS 1.2機能をサポートし、より優れたまたは改善されたセキュリティとパフォーマンスを提供する。ただし、暗号スイートの設定など、まだ入っていないTLS 1.3機能もある。TLS 1.3はGo 1.13でデフォルトになる予定だ。

最後に、最新のGoリリースでは、macOS、iOS、AIX、ARM上のWindowsの互換性も向上している。

Go 1.12には、ここで紹介したもの以外にもたくさん含まれているため、公式のリリースノートを見逃さないようにしよう。

この記事に星をつける

おすすめ度
スタイル

BT