www.digitalmars.com         C & C++   DMDScript  

digitalmars.D - Threads & Message Passing - Best practices ?

I am using the recommended message passing threading model for my 
project, and it is not always clear how to do things in the best 
way;

1. receive() pattern matching -- what is common here, always send 
(int, someData) where int is a value you compare to. Or create 
dummy types that you can match on directly?

   receive(int cmd, int[] data) { if(cmd == SomeCommand) 
doStuff(data); }
   receive(SomeCommand, int[] data) { doStuff(data); }

The latter seems nicer, but what's the best way to define those 
types?

Or maybe it's better to be even more general?  Something like;

receive(void delegate(ARGS) f, ARGS a) { f(a); }


2. What is the reason you can't decide which thread(s) to 
receive() from and is there any way around it? Right now I need 
to have a static updateAll() method that is aware of all 
instances and call update() on them as needed. Also it's very 
hard to have generic modules that has their own threads because 
they can receive messages from other modules threads...

3. Is there a recommended way to deal with creating immutable 
data ? Right now I just cast to immutable before returning the 
data since I know I have the only reference, but it would be nice 
to have something like a `UniqueReference` containing a 
immutableMove() method...
Sep 11