> First, there is a claim that functional languages facilitate parallel > execution, which is undeniably true if the implementation is something > like that of Haskell (no assignment statements mean no memory contention, > etc.).
Careful here... no assignments in the source language doesn't translate to no assignments in the implementation. For example, laziness relies fundamentally on mutation: when you begin evaluating a thunk, the thunk is overwritten with a "black hole" tag; once evaluation is complete, the thunk is overwritten again with the resulting value. If another thread attempts to evaluate the same thunk, it is added to a queue stored in the black hole, which is woken when the black hole is overwritten. (If the same thread attempts to evaluate the thunk, the RTS prints "<< Loop >>" to warn you of an infinite loop.) Notice that, at least in a naive implementation, that blackhole update must be synchronised across all processors - you don't want to processors to evaluate the same thunk in parallel by accident because of a race. So there certainly is memory contention. Whether this can be addressed in some way is a question for those more qualified than I... --KW 8-) _______________________________________________ Haskell mailing list [email protected] http://www.haskell.org/mailman/listinfo/haskell
