[Proposal] Weak reference implementation for D

Benjamin Thaut code at benjamin-thaut.de
Sun Oct 13 01:36:40 PDT 2013


Am 13.10.2013 09:47, schrieb Denis Shelomovskij:
> --- 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
>

I like the idea of adding weak references to phobos.

Will rt_attachDisposeEvent also work with std.allocator? Or does it rely 
on the GC running?

Kind Regards
Benjamin Thaut


More information about the Digitalmars-d mailing list