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

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

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.
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.