[erlang-questions] How about a new warning? Was: Re: trouble with erlang or erlang is a ghetto

Richard Carlsson <>
Thu Aug 4 00:39:39 CEST 2011


On 08/04/2011 12:24 AM, Robert Virding wrote:
> I must say that I find this a little strange. If the evaluation order
> of subexpressions is defined, which it is, then I would have expected
> that the whole effect of a subexpression would be visible in "later"
> subexpressions. Hence you could do things like:
>
> (X=8) + X
 > foo(X = bar(42), X)
>
> but not
>
> X + (X=8)
 > foo(X, X = bar(42))
>
> because of the evaluation order.

You could, yes, but it's not a good idea. For example, a refactoring 
that switches the order of arguments to a function would have to 
consider any bindings in calling occurrences and lift them out to 
preserve the evaluation order *and* the bindings:

   foo(f(), X=bar(), g(X))

must become

   V1 = f()
   X = bar(42),
   V2 = g(X),
   foo(V1, V2, X)

or possibly

   foo(f(), begin X=bar(42), g(X) end, X)

if you want to switch the order of the last two arguments.

The rule that all arguments are evaluated in the same environment makes 
the world a happier place. If I want Basic, I know where I can get it. ;-)

   /Richard



More information about the erlang-questions mailing list