I noticed that Alice ML's semantics of the de facto standard use
"function" differs from the semantics of use in other SML
implementations including at least SML/NJ, Poly/ML, and Moscow ML.
Informally speaking, in Alice ML, a use'd file is first evaluated
completely.  Then the files use'd by that file are evaluated.  In
other implementations, a use'd file is evaluated immediately, before
evaluating the rest of the file calling use.  For example, if you have
files src1.sml and src3.sml whose evaluation just prints src1 and
src3, respectively, then evaluating

  use "src1.sml" ; print "Here!\n" ; use "src3.sml" ;

in Alice ML prints (among other things)

  Here!
  src1
  src3

In other implementations, the same prints

  src1
  Here!
  src3

I can imagine some justifiable technical reasons for Alice ML's
choice, but, honestly, I prefer the semantics provided by other
implementations.

If you have a source file "callMe.sml" that contains a function

  fun callMe () = print "You called!\n"

then evaluating

  use "callMe.sml" ; callMe () ;

produces an error in Alice ML, but is evaluated successfully in other
implementations.

Any chance that Alice ML might switch to the de facto standard (and
unspecified, AFAIK) semantics of use?  I find the de facto standard
semantics significantly more useful.

-Vesa Karvonen

_______________________________________________
alice-users mailing list
[email protected]
http://www.ps.uni-sb.de/mailman/listinfo/alice-users

Reply via email to