SSブログ

bytes.Bufferの実装の変更 [golang]

プログラミング言語Go (ADDISON-WESLEY PROFESSIONAL COMPUTING SERIES)

プログラミング言語Go (ADDISON-WESLEY PROFESSIONAL COMPUTING SERIES)

  • 作者: Alan A.A. Donovan
  • 出版社/メーカー: 丸善出版
  • 発売日: 2016/06/20
  • メディア: 単行本(ソフトカバー)

『プログラミング言語Go』の「6.6 カプセル化」でbytes.Bufferに関して次のような記述があります(193ページ)。
例として、bytes.Buffer型を考えてみてください。 この型は非常に短い文字列を蓄積するために頻繁に使われます。したがって、そのようによくある場面でのメモリ割り当てを避けるために、そのオブジェクト内に少し余分な領域を確保するのは有益な最適化です。 Bufferは構造体型なので、その領域は大文字で始まっていない名前を持つ[64]byte型の追加のフィールドの形式になります。このフィールドが追加されたとき、それは公開されなかったので、Bufferを使うbytesパッケージの外部のクライアントは、改善された性能を除いたどの変更にも気づきませんでした。
実際に、Go 1.11まではこの記述にあるような実装なのですが、次のGo 1.12ではこの[64]byte型の追加のフィールドは削除されるようです。修正のコミットは、こちらです。

コメント(0)