Nel suo discorso The Future Of Clojure Bodil fa la seguente affermazione:I riduttori (in Clojure) risolvono il problema dell'accumulazione di foldr di ridimensionamento delineato da Guy Steele?
Guy Steele ha tenuto un discorso a ICFP chiamato Organizing Functional Code for Parallel Execution (or, foldl and foldr Considered Slightly Harmful) (anche in ACM).
In esso Guy Steele afferma sul vetrino 70:
Non appena dici “prima,
SUM = 0
” si contengano errori. Gli accumulatori sono BAD per il parallelismo. Si noti chefoldl
efoldr
, sebbene funzionali, sono fondamentalmente cumulativi.
Che è un po 'interessante. Quindi Bodil sta dicendo che Guy Steele sta chiamando un problema. Poi ha affermato che Rich lo ha affrontato con Reducers (e Transducers che sono una continuazione di questa linea di pensiero). In the Transducers talk alle 16:11 vediamo Rich chiamando alcuni documenti particolari su foldr
.
- Bird - Lectures on Constructive Functional Programming (1988)
- Hutton - A tutorial on the universality and expressiveness of fold (1999)
Rich dice effettivamente che fold
s sono componibili - e si possono usare per costruire altre funzioni di ordine superiore, come map
e filter
.
La mia domanda è - era giusto Bodil? Rich ha risolto il problema creato da Guy Steele? I riduttori (in Clojure) risolvono il problema dell'accumulazione di foldr raddrizzamento delineato da Guy Steele?
È possibile rimuovere il tag 'clojure' se si ritiene che la domanda abbia un pubblico più ampio. – leppie
Si noti che i trasduttori attualmente (clojure 1.7.0-alpha4) non hanno implementazione parallela che invoca fork-join come fanno i riduttori. Tuttavia, i trasduttori paralleli sono ancora nelle carte per le versioni future. – NielsK