| Thread overview | ||||||
|---|---|---|---|---|---|---|
|
December 23, 2011 D1 & D2 discrepancy | ||||
|---|---|---|---|---|
| ||||
The following piece of code compiles without error on D1(1.072) & D2(2.057). However the D2 version doesn't run fine. ( output below ) ---------------------------->8---------------------------- abstract class Receiver(M) { this() { Broadcaster!(M).register(this); } ~this() { Broadcaster!(M).unregister(this); } abstract void onMessage( M message ); } abstract class Emitter(M) { void emit(M message) { Broadcaster!(M).broadcast(message); } } static class Broadcaster(M) { private static Receiver!(M)[string] mReceivers; public static void register( Receiver!(M) receiver ) { mReceivers[receiver.toString()] = receiver; } public static void unregister( Receiver!(M) receiver ) { mReceivers.remove(receiver.toString()); } public static void broadcast( M message ) { foreach( ref receiver; mReceivers ) { receiver.onMessage( message ); } delete message; } } //================================================== import std.stdio; void main() { class TestMessage { this( string m ) { stringAttribute = m; } string stringAttribute; } class TestReceiver1: Receiver!(TestMessage) { this() { super(); } override void onMessage( TestMessage m ) { writefln( "receiver 1 :", m.stringAttribute ); } } class TestReceiver2: Receiver!(TestMessage) { this() { super(); } override void onMessage( TestMessage m ) { writefln( "receiver 2 :", m.stringAttribute ); } } class TestEmitter: Emitter!(TestMessage) { void send() { emit( new TestMessage("Hey") ); } } auto e = new TestEmitter; auto r1 = new TestReceiver1; auto r2 = new TestReceiver2; e.send; delete r2; e.send; } ----------------------------8<---------------------------- * Output of the D1 version : receiver 1 :Hey receiver 2 :Hey receiver 1 :Hey * Output of the D2 version : receiver 1 : receiver 2 : receiver 1 : Is this a bug or something stupid on my part ? | ||||
December 23, 2011 Re: D1 & D2 discrepancy | ||||
|---|---|---|---|---|
| ||||
Posted in reply to lanael | > * Output of the D1 version :
> receiver 1 :Hey
> receiver 2 :Hey
> receiver 1 :Hey
>
>
> * Output of the D2 version :
> receiver 1 :
> receiver 2 :
> receiver 1 :
>
>
> Is this a bug or something stupid on my part ?
Looks suspicious. Debug it to see what gets called.
| |||
December 24, 2011 Re: D1 & D2 discrepancy | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Trass3r | W dniu 23.12.2011 14:37, Trass3r pisze:
>> * Output of the D1 version :
>> receiver 1 :Hey
>> receiver 2 :Hey
>> receiver 1 :Hey
>>
>>
>> * Output of the D2 version :
>> receiver 1 :
>> receiver 2 :
>> receiver 1 :
>>
>>
>> Is this a bug or something stupid on my part ?
>
> Looks suspicious. Debug it to see what gets called.
writefln should be replaced with writeln and it works on d2 too.
| |||
January 03, 2012 Re: D1 & D2 discrepancy | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Łukasz Wrzosek | On Sat, 24 Dec 2011 01:45:56 +0100, Łukasz Wrzosek wrote: > writefln should be replaced with writeln and it works on d2 too. D1 does not have a writeln function: http://digitalmars.com/d/1.0/phobos/std_stdio.html | |||
Copyright © 1999-2021 by the D Language Foundation
Permalink
Reply