[r6rs-discuss] Implicitly Concurrent Scheme

Antonio Vieiro antonio.vieiro at gmail.com
Sun Nov 22 18:06:08 EST 2009


Hi again,

A programmer that relies on unspecified order of evaluation is prone to 
errors, and must await unexpected results. Whether these follow the 
serialization constraint or not is of no importance, as the final result 
he may get will depend on the Scheme implementation he uses.

In [1] depending on the order of evaluation, Example 3 may give the 
following results in serializable order:

'((A 2)) ; Sequential SS1
'((A 3)) ; Sequential SS2

So the programmer may get '((A 2)) in one implementation and '((A 3)) in 
another.

Whereas in parallel evaluation the results might be

'((A 2)) ; Parallel PS1
'((A 1)) ; Parallel PS2

And there's no problem in that, I think: again the programmer gets 
different results in different implementations, so what?

By removing the serialization restriction we're just *increasing* the 
number of results you can get when you rely on unspecified order of 
evaluation.

And these new results, I think, are as predictable as the ones the 
programmer can get with the serialization constraint (as [1] shows).

There're more results now, but these new results are not less 
predictable (nor less clear) than the previous set of results.

Programmer ammunition against these new results (as against the 
unexpected behaviour of unspecified evaluation) is 'begin', as has 
always been.

The only advantage I can think the serialization constraint offers is to 
  make formal reasoning about the language easier, so one can build an 
operational semantics for Scheme (as in [2]) more easily without 
worrying about concurrency (the serialization restriction is taken into 
account in [2], though).

But then (if so) this is a benefit for the academic community, not for 
the user community.

Cheers,
Antonio


[1] http://okmij.org/ftp/Computation/serialization.html
[2] http://lambda-the-ultimate.org/node/971

Aaron W. Hsu escribió:
[...]
> 
> This restrictions ensures two things:
> 
>  1) The behavior of the expression in question will never exhibit
>  behaviors that cannot be reproduced in a single-threaded environment.
> 
>  2) The programmer need not constantly consider issues of threading for
>  every function call, which must happen in the case of ICS.
> 
> In other words, removing the restriction makes programs less clear, more
> prone to problems, and hence, less reliable, without actually
> introducing anything new for the user. This is all for the sake of
> making it easier to concurrently execute procedure calls for the
> implementors. I can't see how it is worth it.
> 
>  Aaron W. Hsu
> 



More information about the r6rs-discuss mailing list