Events in D

bitwise via Digitalmars-d digitalmars-d at puremagic.com
Tue Aug 29 10:05:36 PDT 2017


On Tuesday, 29 August 2017 at 16:25:33 UTC, Jonathan Marler wrote:
> On Tuesday, 29 August 2017 at 05:10:25 UTC, bitwise wrote:
>> [...]
>
> I'm confused, C# has the same problem with events.  They are 
> delegates which under the hood have 2 pointers, a pointer to 
> the method and a pointer to an instance of the object.  How 
> would that be different than if you used delegates in your D 
> library?

You're right that a D event would also incur the same cost for 
adding a delegate to an event. However, there are additional cost 
and problems that come with having the event in a self-contained 
struct that sits in some host object.

1) additional memory cost of a pointer to the event's host object 
if access to a shared mutex, lock, or anything is needed (even if 
no events are attached).

2) additional memory cost of one or more delegates to methods of 
the host object if any special logic is needed to update the host 
object's state in some way when an event is added or removed 
(even if no events are attached). Consider how bad this could get 
when an object needs 4-5, or even more events.

3) inflexibility. It's impossible to satisfy everything that one 
may need with a library implementation, and any attempt at doing 
so would result in an extremely bloated, and still inadequate 
abstraction. For example, @nogc/@safe/etc attributes, choice of 
custom internal container/allocator, signature of callbacks to 
host objects, and I'm sure there's more.

The solution I presented is very simple and easily accounts for 
all of the above stated problems - No memory overhead, direct 
access to host object's members, choice of any attributes or 
event storage you want, straight-forward syntax.




More information about the Digitalmars-d mailing list