aboutsummaryrefslogtreecommitdiff
path: root/src/weak/pointer.go
AgeCommit message (Collapse)Author
2025-03-28weak: clarify Pointer equality semanticsMichael Anthony Knyszek
The docs currently are imprecise about comparisons. This could lead users to believe that objects of the same type, allocated at the same address, could produce weak pointers that are equal to previously-created weak pointers. This is not the case. Weak pointers map to objects, not addresses. Update the documentation to state precisely that if two pointers do not compare equal, then two weak pointers created from those two pointers are guaranteed not to compare equal. Since a future pointer pointing to the same address is not comparable with a pointer produced *before* an object at that address has been reclaimed, this is sufficient to explain that weak pointers map 1:1 with object offsets, not addresses. (An object slot cannot be reused unless that slot is unreachable, so by construction, there's never an opportunity to compare an "old" and "new" pointer unless one uses unsafe tricks that violate the unsafe.Pointer rules.) Fixes #71381. Change-Id: I5509fd433cde013926d725694d480c697a8bc911 Reviewed-on: https://go-review.googlesource.com/c/go/+/643935 Reviewed-by: Carlos Amedee <carlos@golang.org> Auto-Submit: Michael Knyszek <mknyszek@google.com> LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Reviewed-by: Filippo Valsorda <filippo@golang.org>
2025-02-06weak: prevent unsafe conversions using weak pointersthepudds
Prevent conversions between Pointer types, like we do for sync/atomic.Pointer. Fixes #71583 Change-Id: I20e83106d8a27996f221e6cd9d52637b0442cea4 Reviewed-on: https://go-review.googlesource.com/c/go/+/647195 LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Auto-Submit: Michael Knyszek <mknyszek@google.com> Reviewed-by: Michael Knyszek <mknyszek@google.com> Reviewed-by: Cherry Mui <cherryyz@google.com>
2025-01-07weak: don't panic when calling Value on a zero PointerMichael Anthony Knyszek
Currently weak.Pointer.Value will panic if the weak.Pointer is uninitialized (zero value) which goes against it's documentation. Fix this and add a test. While we're here, also add a test to ensure weak.Make[T](nil) is equivalent to the zero value of weak.Pointer[T]. Fixes #71153. Change-Id: I4d9196026360bc42a5bfcb33ce449131ec251dba Reviewed-on: https://go-review.googlesource.com/c/go/+/641095 Reviewed-by: David Finkel <david.finkel@gmail.com> Auto-Submit: Michael Knyszek <mknyszek@google.com> LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Reviewed-by: Carlos Amedee <carlos@golang.org>
2024-12-23weak: fix typo in warning about tiny allocator optimizationMichael Anthony Knyszek
Fixes #70972. Change-Id: Ib04c2a3129a1da651a0b4674b372aec73966115a Reviewed-on: https://go-review.googlesource.com/c/go/+/638377 LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Reviewed-by: Ian Lance Taylor <iant@google.com>
2024-12-18weak: improve grammar in doc commentsMichal Bohuslávek
Change-Id: I577b8a6bf2b7d899cc7ff7211c73549c90db9d94 Reviewed-on: https://go-review.googlesource.com/c/go/+/637355 Reviewed-by: Ian Lance Taylor <iant@google.com> LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Auto-Submit: Ian Lance Taylor <iant@google.com> Reviewed-by: Michael Knyszek <mknyszek@google.com>
2024-12-09weak: align weak.Pointer documentation with runtime.AddCleanupMichael Anthony Knyszek
In hindsight, I think the "advice" I wrote is a bit heavy-handed and better suited for something like the GC guide. Listing the use-cases seems good, and all the possible things that go wrong seems to do the trick in terms of deterrence, like it does with finalizers. Also, include some points I missed, like the tiny allocator warning and the fact that weak pointers are not guaranteed to ever return nil. Also, a lot of this actually shouldn't have been in the package docs. Many of the warnings only apply to weak pointers, but not other data structures that may live in this package in the future, like weak-keyed maps. Change-Id: Id245661540ffd93de4b727cd272284491d085c1e Reviewed-on: https://go-review.googlesource.com/c/go/+/634376 Reviewed-by: Carlos Amedee <carlos@golang.org> LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Auto-Submit: Michael Knyszek <mknyszek@google.com>
2024-11-18weak: move internal/weak to weak, and update according to proposalMichael Anthony Knyszek
The updates are: - API documentation changes. - Removal of the old package documentation discouraging linkname. - Addition of new package documentation with some advice. - Renaming of weak.Pointer.Strong -> weak.Pointer.Value. Fixes #67552. Change-Id: Ifad7e629b6d339dacaf2ca37b459d7f903e31bf8 Reviewed-on: https://go-review.googlesource.com/c/go/+/628455 LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Reviewed-by: Carlos Amedee <carlos@golang.org> Auto-Submit: Michael Knyszek <mknyszek@google.com>