Thread overview
D1 & D2 discrepancy
Dec 23, 2011
lanael
Dec 23, 2011
Trass3r
Dec 24, 2011
Łukasz Wrzosek
Jan 03, 2012
Jesse Phillips
December 23, 2011
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
> * 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
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
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