On Sunday, 13 October 2013 at 07:47:55 UTC, Denis Shelomovskij
wrote:
--- Proposal ---
The proposal is to add weak reference functionality based on
`unstd.memory.weakref`. It can be placed e.g. in `core.memory`.
Source code:
https://bitbucket.org/denis-sh/unstandard/src/HEAD/unstd/memory/weakref.d
Documentation:
http://denis-sh.bitbucket.org/unstandard/unstd.memory.weakref.html
Enhancement request:
http://d.puremagic.com/issues/show_bug.cgi?id=4151
--- Reasons ---
Reasons, why we do need weak reference functionality in D
(Issue 4151 [1]):
1. It has a general use.
I suppose no question here.
2. It's hard to implement correctly.
As a proof here are incorrect implementations written by
experienced developers:
* Weak reference functionality in `std.signal`
implementation:
https://github.com/D-Programming-Language/phobos/blob/7134b603f8c9a2e9124247ff250c9b48ea697998/std/signals.d
* Alex's one from MCI:
https://github.com/lycus/mci/blob/f9165c287f92e4ef70674828fbadb33ee3967547/src/mci/core/weak.d
* Robert's one from his new `std.signals` implementation
proposal:
https://github.com/phobos-x/phobosx/blob/d0cc6b45511465ef1d493b0d7226ccb990ae84e8/source/phobosx/signal.d
* My implementation (fixed now, I hope):
https://bitbucket.org/denis-sh/unstandard/src/cb9a835a9ff5/unstd/memory/weakref.d
Everybody can check his knowledge of concurrent programming
and D GC by trying to understand what exactly every
implementation does and where are race conditions. It's
recommended to read implementations in the order provided here
going to the next one as soon as you see why previous one is
incorrect. For now the only [probably] fixed implementation is
mine so one can see spoiler here:
https://bitbucket.org/denis-sh/unstandard/history-node/HEAD/unstd/memory/weakref.d
(the first and the most fixing (spoiling you joy to
understand everything yourself) commit is 6f59b33)
3. It's hard to create a good API design for it.
No jokes. E.g. there are two different behaviours of .NET
weak references and even more in Java library.
4. It is needed for correct signals implementation in D.
The lack of correct signals implementation is one of
[major?] disadvantages of D.
Bug report:
http://d.puremagic.com/issues/show_bug.cgi?id=9606
+1 having weakref in phobos