Version française
Home     About     Download     Resources     Contact us    

This site is updated infrequently. For up-to-date information, please visit the new OCaml website at

Browse thread
[Caml-list] Evaluation Order
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: 2001-06-09 (20:17)
From: Brian Rogoff <bpr@b...>
Subject: Re: [Caml-list] Evaluation Order
On Sat, 9 Jun 2001, David McClain wrote:
> I thought I would share an experience with all of you to solicit your
> *constructive* comments.

Hmmm, last time we were through this I recall that you were emphatically
in favor of leaving the evaluation order undefined. It is good that you
have finally seen the light ;-) (sorry, that wasn't terribly constructive). 

> I had forgotten about the evaluation ordering in OCaml being from right to
> left. 

Actually, if you are an anal reader of reference manuals (sorry, once an
Ada programmer...) you'll not that evaluation order in OCaml is currently 
unspecified. Of course, the one implementation behaves as you describe.

> I suppose if Hebrew or Arabic were my native tongue then the opposite
> expectation would be true and I would have naturally written
>     let ans = fny() + fnx()
> and I would be no wiser about evaluation order here, since everything would
> have worked properly.

No, if Hebrew or Arabic were your native tongue you'd have exactly the
same expectation as you have now, which is that the events occur in the
order that you scan them while reading. What happens in OCaml now is like
some weird boustrophedon.

> I had been lulled into a belief that OCaml was nearly perfect, while C/C++
> is definitely not. 

But that's true! Damn, I keep baiting Chris, gotta sit on my hands :-)

> The problem is not one of OCaml, but rather a clash between normal
> psychological expectations and the programming language at hand.

No, this is a language problem. Lots of people who teach OCaml have mentioned 
that this is an issue. If the clash with expectation is so great then that
You should always be careful about sequencing in imperative style programming, 
but IMO this is one of those few things that SML does right that OCaml does 
not. As you say, there is a very strong expectation that events occur in
the order that we read them. The original arguments about optimizations
and parallelism don't seem to have borne fruit, so it would be good to fix

> Any thoughts? (other than that I was boneheaded here!)

Use lots of lets to sequence operations. Avoid side effects like output in
value returning operations, otherwise you'll want to use lets to sequence
the outputs while getting the value. Write Haskellish code, by which I
mean try to push all of your refs and mutable values to the top level and
have all of your library calls pure. Agitate to get this annoying feature
fixed. Etc...

-- Brian

Bug reports:  FAQ:
To unsubscribe, mail  Archives: