[r6rs-discuss] Implicitly Concurrent Scheme

Aubrey Jaffer agj at alum.mit.edu
Mon Nov 23 22:56:25 EST 2009


 | Date: Sun, 22 Nov 2009 16:12:37 -0500
 | From: "Aaron W. Hsu" <arcfide at sacrideo.us>
 | 
 | ...  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.

Actually, it doesn't!  Implicitly-concurrent `map' is already allowed
by the Scheme Reports:

  <http://voluntocracy.blogspot.com/2009/11/implicit-concurrency.html>

  The only RnRS mention of concurrency appears in the description of
  Procedure call:

      Note: Although the order of evaluation is otherwise unspecified,
      the effect of any CONCURRENT evaluation of the operator and
      operand expressions is constrained to be consistent with some
      sequential order of evaluation. The order of evaluation may be
      chosen differently for each procedure call.

  Because `do', `let', and `letrec' bindings are defined in terms of
  (`lambda' and) procedure calls, this restriction applies to them as
  well.

  But the Reports are silent as to the evaluation order for `map' ...

Thus the programmer who wants to write closed-expressions involving
`map' which have repeatable behavior across all possible RnRS
platforms must write concurrently-repeatable `map' expressions!



More information about the r6rs-discuss mailing list