[Proposal] Weak reference implementation for D
Flamaros
flamaros.xavier at gmail.com
Sun Oct 13 11:20:10 PDT 2013
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
More information about the Digitalmars-d
mailing list