Go 1.5 リリース

Go 1.5 is released by Andrew Gerrand

本日、Goプロジェクトは、Goの6番目のメジャーな安定版リリースとなるGo 1.5をリリースできることを誇りに思います。

今回のリリースでは実装に大きな変更が加えられています。コンパイラのツールチェインはCからGoへ翻訳され、Goのコードベースから最後まで残っていたCのコードが取り除かれました。ガベージコレクタは全面的に再設計され、ガベージコレクションの一時停止時間が劇的に短縮されています。スケジューラに関連する改善によって、デフォルトのGOMAXPROCSの値(同時に実行されるゴルーチンの数)も1から論理CPUの数へと変わりました。リンカへの変更により、Goのパッケージを共有ライブラリとしてGoプログラムにリンクできるようになったほか、Cプログラムからリンクまたはロードできるアーカイブや共有ライブラリとしてGoのパッケージをビルドすることも可能になっています(設計ドキュメント)。

このリリースには開発者向けツールの改善も含まれています。「internal」パッケージのサポートにより、パッケージ間で実装の詳細を共有できます。外部依存関係の「ベンダリング」に対する実験的なサポートは、Goプログラムにおける依存関係管理のための標準的な仕組みに向けた一歩です。新しい「go tool trace」コマンドは、ランタイムの新しいトレース機構が生成するプログラムトレースを可視化します。新しい「go doc」コマンドは、Goパッケージのドキュメントを閲覧するための改善されたコマンドラインインターフェースを提供します。

また、いくつかの新しいオペレーティングシステムおよびアーキテクチャへの移植も行われています。より成熟した新しい移植版はdarwin/arm、darwin/arm64(AppleのiPhoneおよびiPadデバイス向け)、そしてlinux/arm64です。さらにppc64とppc64le(IBMの64ビットPowerPC、ビッグエンディアンおよびリトルエンディアン)への実験的なサポートもあります。

新しいdarwin/arm64への移植と外部リンク機能は、Go mobileプロジェクトを後押しします。これはAndroidやiOSデバイス上でアプリを構築するためにGoがどのように使えるかを探る実験的な取り組みです。(Go mobileの作業そのものは今回のリリースには含まれていません。)

言語仕様への変更はごく小さなものが1つだけです。マップリテラルの構文にあった制限が緩和され、スライスリテラルとより簡潔で一貫した書き方ができます。

標準ライブラリにも多くの追加と改善がありました。flagパッケージは、よりすっきりした使用方法のメッセージを表示するようになりました。math/bigパッケージは、任意精度浮動小数点数を計算するためのFloat型を新たに提供します。LinuxおよびBSD系システムにおけるDNSリゾルバの改善によって、名前解決を行うプログラムでcgoが不要になりました。go/typesパッケージはgolang.org/x/toolsリポジトリから標準ライブラリへと移されました。(新しいgo/constantパッケージとgo/importerパッケージも、この移動に伴って生まれたものです。)reflectパッケージには、既存のSliceOf関数と同様のArrayOf関数とFuncOf関数が追加されました。そしてもちろん、いつも通り細かな修正と改善のリストもあります。

詳細についてはリリースノートをご覧ください。あるいは、今すぐ試してみたいという方は、ダウンロードページからGo 1.5を入手してください。

By Andrew Gerrand