Review of std.signal
Robert
jfanatiker at gmx.at
Tue Jan 7 00:18:24 PST 2014
On Monday, 6 January 2014 at 10:13:44 UTC, Vladimir Panteleev
wrote:
> On Thursday, 7 November 2013 at 13:45:57 UTC, Dicebot wrote:
>> Time to move forward with some more reviews :)
>
> Hi,
>
> Apologies, I missed this review thread. So, some questions /
> observations:
>
> IMO, the effort to disallow third parties to "emit" signals on
> your object by far exceeds its worth.
>
> For this purpose, you have needed:
> - string mixins
> - ...which declare, by convention, a field with a name not
> explicitly given by the user
> - ...with a workaround for when they don't work
> - an enumeration type
> - two different signal struct types
> - a boatload of documentation
> - a nontrivial cognitive effort on the user to grok all of the
> above
>
> This little feature steals too much focus, and IMO is not worth
> it.
>
> As a compromise, have you considered template mixins?
I did, but there are still some bugs with template mixins, which
finally drove me to a string mixin and in the end I liked it
better. IMO there is no real benefit of a template mixin over a
string mixin in this case. The implementation got a lot easier
and bug free.
Instead of dropping it all together, I think I will just move it
to the bottom and make it a goody, instead of the proposed
default usage of std.signal.
>
>> This implementation supersedes the former std.signals
>
> I don't think comparisons of older versions of a module belong
> in the module's documentation.
You are probably right, will fix that.
>
>> dg must not be null. (Its context may.)
>
> I don't think the context will ever be null (unless you take
> the address of a null class/struct pointer's method).
> (toDelegate uses the context pointer to store the function
> pointer, and the function pointer to store a template instance
> according to the function's arguments.)
It is for me, if I create a lamda delegate which does not use
it's context. But I might just cut this from the documentation.
>
>> It implements the emit function for all other functionality it
>> has this aliased to RestrictedSignal.
>
> Missing some punctuation, I think.
Fixed, thanks!
>
>> The idea is to instantiate a Signal privately and provide a
>> public accessor method for accessing the contained
>> RestrictedSignal.
>
> I had a hard time understanding this line the first time.
> Please reword without using "The idea is", because it's not
> clear what "the idea" is for - usage? Rationalization of
> implementation method?
>
>> Use this overload if you either really, really want strong ref
>> semantics for some reason
>
> Was the emphasis really necessary? It makes complete sense to
> build an asynchronous-event-model application using 100% only
> "strong connections" (delegates or delegate arrays). I don't
> remember ever NEEDING weak-referenced callbacks.
You are right, but you already imply the reason in your argument,
if you need strong connections for your application, you are
probably better off with a simple delegate array. From
discussions on this mailinglist it became apparent that people
often use strong connections for no good reasons, nevertheless I
just dropped it :-)
Thanks a lot for this valuable feedback!
Best regards,
Robert
More information about the Digitalmars-d
mailing list