memoメモ

最近はGo言語関連で。φ(..)メモメモ

Go tipでなにが行われてる?(2013-08-23)

What's happening in Go tip (2013-08-23)よりメモ。

前回のメモはこちら:http://atotto.hatenadiary.jp/entry/2013/08/19/083830

gopher

(以下、間違い/勘違いがあるかもしれないので注意してね)

What's happening in Go tip (2013-08-23)

  • スライスの新しいシンタックス
  • パフォーマンス向上
  • 高速な定数時間 P-256 楕円曲線の追加
  • godocはどこへ??
スライス

Go 1.2で追加されるなかでもちょっと議論になる内容。

mySlice[i:j]とするとiからjまでの新しいスライスが生成されます。 mySliceと新しいスライスは共有しており、操作するともう一方にも影響があります。 これはちゃんと期待された振る舞いです。

気づいてないかもしれないけど、2つのスライスは容量も共有してます。 スライスは"長さ"と"容量"をもっている、つまり、スライスの要素の数見られるし、要素の数潜在的にアクセスできる。 容量はappend()を使うときに関係する。 スライスへappendするとき、 基礎となる配列(容量)に十分な空きがあるかチェックします。 もしあれば、同じ配列、同じメモリに新しいスライスを大きな"長さ"で作成します。

code: http://play.golang.org/p/rvV8gLTPvZ

append()は不思議な結果になる。オリジナルのスライスを書き換えちゃう。

安全な代替は、まだ自前のメモリアロケータを実装を許すことだけど、 無造作なメモリ汚染の防止は、返すスライスの容量を制限すること、 appendは作用できないメモリの更新をしないようにすることだろう。 それで、新しい代替は、スライスの新しいシンタックス mySlice[i:j:k] です。 (最初の2つの要素はこれまでどおり、iからjへのスライス。 3つ目の要素は容量(k-iとして計算)に影響する)

k-i の容量は、単にkは、 新しいスライスで作用可能にする基礎となる配列への絶対的なインデックスを意味する。 kjと同じにすることで、その長さを超えて作用できません。 これで、メモリのNバイトを返すというアロケータを書くことができ、 これ以上先を見せることを防ぐことが出来ます。

パフォーマンス向上
  • net/httpパッケージのパフォーマンス向上
    • JSONエンコーディングの高速化
    • ZIP圧縮の高速化
    • HTTPの改善
  • DNS Lookupの複数アクセス時の統合
  • sync.Condの高速化
  • DES暗号化の高速化
  • bzip2圧縮の高速化
  • io.Copyの高速化
高速な定数時間 P-256 楕円曲線の追加

定数時間 P-256 楕円曲線 (constant-time P-256 elliptic curves)

定数時間ってのが大事な点で、 全ての入力に対して関数のとる時間が同じなので、 タイミングアタック(Timing attack - Wikipedia, the free encyclopedia)を避けることができる。 タイミングアタックは、サイドチャネルアタック(Side channel attack - Wikipedia, the free encyclopedia)のひとつで、タイミングの情報は暗号化を破るために使われる。

補足資料:サイドチャネル攻撃 - Wikipedia

godocはどこへ??

Go tipを使うと godoc が動きません。というか、godoc は無くなりました。 残っているgodocを使うと次のようにエラーがでるでしょう:

readTemplate: open /Users/rsc/g/go/lib/godoc/codewalk.html: no such file or directory

godocはgo.toolsのサブリポジトリへ引っ越したので:

$ go get code.google.com/p/go.tools/cmd/godoc

として取ってくる必要があります。

プログラミング言語Goフレーズブック

プログラミング言語Goフレーズブック

  • 作者: David Chisnall,デイビッド・チズナール,柴田芳樹
  • 出版社/メーカー: ピアソン桐原
  • 発売日: 2012/10/04
  • メディア: 単行本(ソフトカバー)
  • 購入: 1人 クリック: 5回
  • この商品を含むブログを見る

基礎からわかる Go言語

基礎からわかる Go言語

Programming in Go: Creating Applications for the 21st Century (Developer's Library)

Programming in Go: Creating Applications for the 21st Century (Developer's Library)