Go tipでなにが行われてる?(2013-08-23)
What's happening in Go tip (2013-08-23)よりメモ。
前回のメモはこちら:http://atotto.hatenadiary.jp/entry/2013/08/19/083830
(以下、間違い/勘違いがあるかもしれないので注意してね)
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
は、
新しいスライスで作用可能にする基礎となる配列への絶対的なインデックスを意味する。
k
をj
と同じにすることで、その長さを超えて作用できません。
これで、メモリの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)のひとつで、タイミングの情報は暗号化を破るために使われる。
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
として取ってくる必要があります。
- 作者: David Chisnall,デイビッド・チズナール,柴田芳樹
- 出版社/メーカー: ピアソン桐原
- 発売日: 2012/10/04
- メディア: 単行本(ソフトカバー)
- 購入: 1人 クリック: 5回
- この商品を含むブログを見る
- 作者: 古川昇
- 出版社/メーカー: シーアンドアール研究所
- 発売日: 2012/11/21
- メディア: 単行本(ソフトカバー)
- クリック: 7回
- この商品を含むブログ (2件) を見る
Programming in Go: Creating Applications for the 21st Century (Developer's Library)
- 作者: Mark Summerfield
- 出版社/メーカー: Addison-Wesley Professional
- 発売日: 2012/05/01
- メディア: Kindle版
- この商品を含むブログを見る