On Monday 18 July 2011 15:55:52 teo wrote: > On Mon, 18 Jul 2011 10:26:27 -0400, Steven Schveighoffer wrote: > > On Sun, 17 Jul 2011 15:29:02 -0400, teo <teo.ubu...@yahoo.com> wrote: > >> It looks like std.concurrency.spawn does not accept delegates. Is > >> there > >> any reason for that? > > > > There is no type attached to the hidden 'this' pointer. So spawn cannot > > guarantee it doesn't point to unshared data. > > > > -Steve > > Bad. I tried to pass as an argument a pointer to an instance of a class - > a this pointer. That didn't work.
Only stuff that's immutable or implicitly convertible immutable can be passed across threads using spawn and send. Otherwise, there's a risk of it ending up getting altered by both threads (or altered by one when the other one is using at it). Sometimes, that can be a bit restrictive (particularly when you _know_ that something isn't going to be altered by the thread sending it after its sent but the compiler doesn't), but it avoids all kinds of problems. If you want to send a class object across, then it needs to be immutable (which tends to be a bit of a pain to do for classes, since they need to have an immutable constructor, which is often a pain to do). - Jonathan M Davis