Ah OK. I didn't realize that the original Leroy & Doligez paper dealt only with a copying GC, and that this was the intent here as well. In that case, work stealing does indeed makes sense.

Thinking about it some more, I understand why it's not possible to just fork off a suspended thread for synchronous IO as haskell does -- that thread would then modify the local heap, breaking the invariant. So that IS a limitation of the current model, right?

Malcolm: the description is here (http://www.cl.cam.ac.uk/~sd601/multicore.md). As far as I understand, two domains modifying the same reference on the shared heap is the same as in any other language -- it's a write-write conflict, and it needs to be guarded by the user using some primitive. If the reference is in a local heap of another domain, that reference must first have something done to it using a message sent from one domain to another. Unless they go with the model where all mutables sit on the shared heap, meaning that there is no such case.

On Thu, Sep 11, 2014 at 4:53 AM, Malcolm Matalka <mmatalka@gmail.com> wrote:

Is there a detailed description of the memory model somewhere?  For example what does it mean for two domains to modify the same reference?  Apologies if I missed it in the thread.

Den 11 sep 2014 10:40 skrev "Stephen Dolan" <stephen.dolan@cl.cam.ac.uk>:
On Wed, Sep 10, 2014 at 11:42 PM, Yotam Barnoy <yotambarnoy@gmail.com> wrote:
> Maybe I misunderstood something. Does each domain only have a minor private
> heap (ie. copying gc) or do they each also have a major private heap/older
> generation (mark and sweep)? If they have an older generation, then a thread
> could potentially have a lot of data there, no?

Only a private minor heap. The major heap is the shared heap.

--
Caml-list mailing list.  Subscription management and archives:
https://sympa.inria.fr/sympa/arc/caml-list
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
Bug reports: http://caml.inria.fr/bin/caml-bugs