[m-dev.] New release?

Paul Bone paul at bone.id.au
Thu Oct 22 15:56:07 AEDT 2015

On Thu, Oct 22, 2015 at 01:45:11PM +1100, Zoltan Somogyi wrote:
> On Wed, 21 Oct 2015 10:49:16 +1100 (AEDT), "Zoltan Somogyi" <zoltan.somogyi at runbox.com> wrote:
> > Actually, I was thinking about grade options earlier today, prompted by the same
> > concern. I think I will have a proposal worked out in a day or two.
> My proposal is attached. At the moment, it is a description
> of an approach, with some details missing, because it makes sense
> to work out those details only if there is agreement on the basic
> approach. I intend this proposal to start a discussion on its approach.
> If someone wants to turn the proposal into a wiki, go ahead.
> Zoltan.

A related point of confusion are features supported by different grades.

The grades proposal might want to consider information from feature sets
found in a project's source code:


Trailing is a nice simple one.  It corresponds directly to the trailing
variable in Zoltan's proposal.

A tricker one is parallel conjunction, it does not correspond directly to
any option.  It could be viewed as a separate variable that only serves to
constrain other variables.  It implies thread safe and low-level C.

A very tricky option is exactly how concurrency works.  This is something
I've been asked before and badly need to document.  (This is a perfect item
for the wiki incidentally).

Low level C:
    Thread safe:
        Some concurrency, but if you do IO you can block a whole Mercury
        engine, which might be your only engine.
    Non thread safe:
        I think concurrency is currently broken.  I don't think anyone has
        tested or used it.  I believe that it was intended to work.
High level C:
    Thread safe:
        It works, but you get one pthread per Mercury thread, which might be
        what you want, or it might not.
    Non-thread safe:
        Doesn't work.
Java & C#
    Same as high level C, thread safe.

If you want parallel conjunctions and concurrency that behaves properly with
IO then your only option is to use low level C with spawn_native.  But
that's not ideal.

The other solution is to implement proper behaviour with IO in low-level
grades, and parallel conjunctions in high level grades :-P

Anyway, we could either delay this until after Zoltan's idea or something
else is accepted and implemented.  Or create options such as --parallel-conj
that add sufficient constraints to Zoltan's proposal to choose a grade for
the user in those cases.

Paul Bone

More information about the developers mailing list