Upgrade to Pro — share decks privately, control downloads, hide ads and more …

uniqueパッケージの内部実装を支えるweak pointerの話

Avatar for magavel magavel
September 28, 2025

uniqueパッケージの内部実装を支えるweak pointerの話

Avatar for magavel

magavel

September 28, 2025
Tweet

Other Decks in Programming

Transcript

  1. uniqueパッケージによって必要性が明らかに • uniqueパッケージは値のinterningを実現するもの。 • もともとGoはinterningに関するruntime側のサポートが弱かった。 • go4.org/internというコミュニティ実装に頼っていたけど、Finalizerやuintptrを 使ってGCに追跡されない形でポインタを保持したり、安全ではないという問題を 抱えていた(Goのアップデート毎に手動更新が必要などの問題もあった)。 •

    interningのサポートを求めるコミュニティの声はマイノリティだけど、net/netip の前身であるinetaf/netaddrの内部で使用されていて、実は多くの人(Go modules 全体の0.1%と想定)がそのリスクに依存している状態だとわかった。 • ならちゃんとruntime側のサポートも追加してしっかり実装しよう。 ◦ それがuniqueパッケージの提案。 • さらにuniqueパッケージの内部で使われるweak pointerのニッチだけど汎用的な価 値が認知される。
  2. 参考文献・クレジット • Go 1.24 Release Notes • Issue #67552: "weak:

    new package providing weak pointers" • weak references - golang-nuts • From unique to cleanups and weak: new low-level tools for efficiency - The Go Blog • weak package - pkg.go.dev • Weak & Soft references in Go - golang-nuts • Issue #62483: "unique: new package with unique.Handle" • The Go gopher was designed by Renée French.