Is there any plans to make working signals in D?
deadalnix
deadalnix at gmail.com
Mon Apr 15 09:15:49 PDT 2013
On Monday, 15 April 2013 at 12:07:19 UTC, Denis Shelomovskij
wrote:
> 15.04.2013 13:07, Robert пишет:
>>> 2. Make regular D objects on closures [4] to be able to know
>>> when
>>> delegate's outer scope is destroyed (this will auto-fix both
>>> [5] and
>>> [2], see Comment 2 of [2] for code example)
>>
>> I still don't understand what that buys us. Having a closure
>> being an
>> object would make it possible to use a weak reference, but why
>> would you
>> want that? The signal would be the only one to hold a
>> reference to the
>> lamdas context, if this reference was a weak one, then the
>> memory would
>> be claimed immediately. This is why std.signals2 holds a
>> strong ref to
>> the delegate context of a wrapping closure and a weak ref to
>> the target
>> object.
>
> With your `std.signals2` one can't e.g. forward delegate
> connection like this:
> ---
> /// Usage: don't pass struct pointer delegates as `del`.
> void f(void delegate() del)
> {
> obj.event.connect(del);
> }
> ---
> as you require explicit passing an object owning a delegate.
>
> But it is completely unnecessary as delegate do know where it
> was born from and the fact this information isn't tracked when
> a closure is created is a language design issue. One of those
> fixing which is easy, will not break any code and will improve
> things a lot.
Even with that explanation, I still don't see the problem.
More information about the Digitalmars-d
mailing list