On Mon, 18 Jul 2011 18:06:46 +0200, Jonathan M Davis <jmdavisp...@gmx.com>
wrote:
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).
It could be that assumeUnique should handle this, by transforming the
delegate into something spawn() and friends could handle.
Might be worth an enhancement request.
--
Simen