[MLton-user] Order of evaluation of arguments to a function

Ivan Tomac ivan.tomac at gmail.com
Thu Aug 18 17:11:59 PDT 2011


On Fri, Aug 19, 2011 at 1:32 AM,  <rossberg at mpi-sws.org> wrote:
>> Is the following code supposed to print 1 followed by 2 or 2 followed by 1?
>>
>> val _ = (fn () => (print "1\n"; fn x => x)) () (print "2\n"; ())
>>
>> In SML/NJ, MLton and PolyML it does the former, while in Moscow ML it
>> does the latter. Is this specified somewhere in the standard? I
>> noticed equivalent code in OCaml behaves the way Moscow ML does which
>> is not very surprising seeing how Moscow ML was based on Caml Light.
>> Could this be a bug in Moscow ML?
>
> It is specified, and the deviation a (known) bug/limitation of Moscow ML.
> It's due to its implementation being based on the Caml VM, which chose this
> semantics in order to be able to implement curried functions more
> efficiently.
>

Interesting and very useful to know.

> (Note that in OCaml, evaluation order actually depends on whether you are
> using byte code or native code compilation.)
>

That sounds bad.



More information about the MLton-user mailing list