My vote is for something like immutable(Object) ref, as Andrew suggested
earlier. This would allow mutable references to immutable objects to be
passed through a message channel without nasty typecasting.
std.typecons.Rebindable has always been an ugly hack that doesn't quite
do the job. Certainly every attempt I have made to use it has ended
unhappily, and I end up redesigning to not pass objects between threads.
What is the status of the immutable(Object) ref proposal? Is it on the
list of things to do, or is it ruled out? If it is ruled out, then what
is the superior proposal?
On 05/12/11 10:49, Timon Gehr wrote:
On 12/04/2011 11:32 PM, Andrew Wiley wrote:
On Sun, Dec 4, 2011 at 4:23 PM, Andrei Alexandrescu
<seewebsiteforem...@erdani.org> wrote:
On 12/4/11 4:16 PM, Andrew Wiley wrote:
So it looks like right now, message passing is copying objects, which
seems very bad. Check this out:
--------
import std.stdio;
import std.concurrency;
class Bob {
}
void main() {
auto tid = spawn(&func);
auto bob = new shared(Bob)();
writeln("bob is currently at ", cast(void*)(&bob));
This is the address of the reference, not that of the object. Use
cast(void*)(bob).
Andrei
Ah, I am covered with shame.
In that case, no object copying is occurring, and I have message
passing for immutable objects working, although my current solution is
basically to check whether the object is immutable, and if so, memcpy
the reference. That breaks immutability, but only for the reference,
and I don't think there's any alternative unless we get tail
const/immutable into the language.
I'm guessing this is too hackish to get merged into std.variant?
You might want to have a look at std.typecons.Rebindable.
--
Graham St Jack