On 1/10/19 12:15 PM, rx wrote:
alias SyncData = immutable(JSONValue);

void worker(string filename) {
   SyncData data = filename.readText.parseJSON;
   send(ownerTid, data);
}

void main(string[] args) {
   spawn(&worker, args[1]);
   writeln(receiveOnly!SyncData);
}

I'm trying to send this immutable(JSONValue) back to the main thread but when trying to compile, I get the following error:

/usr/include/dmd/phobos/std/concurrency.d(764): Error: cannot modify immutable expression ret.__expand_field_0 cc.d(15): Error: template instance `std.concurrency.receiveOnly!(immutable(JSONValue))` error instantiating

Can anyone help out?

Looks like a long-standing bug (there are several related issues about sending/receiving immutable data). The way std.concurrency.receiveOnly works is it creates a temporary result, then puts the received item into the result, and then returns it. But you can't copy an immutable into a temporary that's already immutable.

e.g. it looks like this:

immutable int x;
x = 5; // error

I don't know if there's a specific "can't receive immutable data" issue report, but certainly, you can add your issue to the list.

-Steve

Reply via email to