All Articles

Go1.4 RC1が出たのでリリースノート翻訳してまとめた

ちょっと楽しみにしていたので

リリースノートを訳してみました。雑な翻訳を見てくださった@cssrader氏に感謝です!

以下、気になったポイントをピックアップしてメモしておきます。 全文(一部訳してないところもあるけど)はGistにあげてますので良かったら参照してください。 わりと細かい修正が入ってますね。

Releasenote-Go-1.4.md

Introduction

おおまかに3つ。

  1. ガベージコレクタが改善された
  2. goコマンドにいくつかツールが追加された
  3. Android、NaCl、Plan9 on AMD64がサポートされた

やはり目玉はAndroid対応ですかね。実際の挙動などについてはGoogle Docsにリンクがあります。

Go support for Android

正式リリースの時にどうなっているか楽しみです。

言語仕様の変更

for-rangeループに要素数だけシンプルループするシンタックスが追加されています。

list := []int{1undefined 2undefined 3undefined 4undefined 5undefined 6}

// 今まではこう書いていた
for _ := range list {
    // do something
}

// こう書ける
for range list {
    // do something
}

※但し、既存のシンタックスチェッカーは前者へ修正しろと指摘するかもしれない、とのこと。多分Vim-goは出ると思います。

二重参照外しの変数に対するメソッドの呼び出しが許可されています。これはよく分かってないです。

type T int
func (T) M() {}
var x **T

// このメソッド呼び出しが許可される
x.M()

flagモジュールとかでコマンドラインフラグの値ってポインタになってて、それ参照外しすることがあったけど、そういうのに対してメソッドがコールできるということかな。詳しい方教えてください…。

インポートパスに関する変更

あるパッケージ内部のモジュールを、外部のモジュールからインポートできないような制限機構が設けられるようです。原文によると、

・<strong>/a/b/c/internal/d/e/f</strong>という配置のパッケージの場合、<strong>internal</strong>以下に内部インポート制限がかかる。
・<strong>internal</strong>以下のパッケージは、ルートから辿るツリー上にある<strong>/a/b/c</strong>のパッケージからのみインポートが可能になる。
・<strong>/a/b/g</strong>というパッケージは外部扱いになり、<strong>internal</strong>以下のパッケージはインポートできない。

ということらしいです。プライベートパッケージが作れるのは地味に嬉しいかもしれないですね。

なお、この機構はGo1.4の時点ではメインリポジトリのみに適用されるようで、任意のリポジトリで適用されるのはGo1.5から、とのこと。

正規のインポートパス

ファイル先頭のpackageeラインに識別用のコメントを書くと、それを正規のインポートパスとして扱うようになるようです。

package pdf // import "rsc.io/pdf"

と書くと、pdfパッケージはrsc.io/pdfのインポートパスを正規のものとして扱うようになり、github.com/rsc/pdfとかでホスティングされているパスからのインポートは拒否するようになる、とのこと。 あんまりよくわかってないけど、今後何らかの原因でリポジトリが移動しても追従できるようにするためらしい。

そもそも今ってそういうパス指定でインポートする方法ってあるのかな…?

サブリポジトリのインポートパスの変更

code.google.com/p/go.toolsとかは上述の正規のインポートパスの識別子が記述されるので、これらのインポートパスを使っているプロジェクトはインポートパスを変更してね、とのこと。 これの記述は2015/06/01あたりを目安に行うそうなので、それ以降のGo1.4を使う場合は変更を。

パッケージ周りのバグフィックスなど

  • 新規パッケージは無し
  • bufio.ScannerがEOFの場合に空のトークンを生成できないバグを修正
  • syscallは凍結し、golang.org/x/sysというサブリポジトリで各カーネルのシステムコール対応の開発を進めているみたい。既存のsyscallパッケージに影響はないけど、今後はサブリポジトリの方を使って欲しい、とのこと
  • 他、各パッケージに小さな変更が入ってます(原文・訳文参照)。

まとめ

ほかにも内部ランタイムに大きめの変更が入っているようですが、いずれも若干の速度改善、または遅延があるものの、下位互換性は保っている、とのことです。素晴らしいですね。 英語苦手ながら頑張って訳してみて良かったです。見たこともないパッケージとかあったし…。

そのうちにRC2が出たりすると思いますが、方針は変わらないと思われます。 正式版が楽しみですね。

現場からは以上です。