concurrency.combinators: adding parallel-product-map, docs for stack effects.

db4
John Benediktsson 2013-10-12 10:45:15 -07:00
parent 278d210064
commit eb801f1072
2 changed files with 13 additions and 9 deletions

View File

@ -7,7 +7,7 @@ HELP: parallel-map
{ $errors "Throws an error if one of the iterations throws an error." } ;
HELP: 2parallel-map
{ $values { "seq1" sequence } { "seq2" sequence } { "quot" { $quotation "( elt -- newelt )" } } { "newseq" sequence } }
{ $values { "seq1" sequence } { "seq2" sequence } { "quot" { $quotation "( elt1 elt2 -- newelt )" } } { "newseq" sequence } }
{ $description "Spawns a new thread for applying " { $snippet "quot" } " to pairwise elements of " { $snippet "seq1" } " and " { $snippet "seq2" } ", collecting the results at the end." }
{ $errors "Throws an error if one of the iterations throws an error." } ;
@ -17,7 +17,7 @@ HELP: parallel-each
{ $errors "Throws an error if one of the iterations throws an error." } ;
HELP: 2parallel-each
{ $values { "seq1" sequence } { "seq2" sequence } { "quot" { $quotation "( elt -- )" } } }
{ $values { "seq1" sequence } { "seq2" sequence } { "quot" { $quotation "( elt1 elt2 -- )" } } }
{ $description "Spawns a new thread for applying " { $snippet "quot" } " to pairwise elements of " { $snippet "seq1" } " and " { $snippet "seq2" } ", blocking until all quotations complete." }
{ $errors "Throws an error if one of the iterations throws an error." } ;
@ -34,6 +34,7 @@ $nl
parallel-each
2parallel-each
parallel-map
parallel-product-map
2parallel-map
parallel-filter
}

View File

@ -1,7 +1,7 @@
! Copyright (C) 2008 Slava Pestov.
! See http://factorcode.org/license.txt for BSD license.
USING: concurrency.futures concurrency.count-downs sequences
kernel macros fry combinators generalizations ;
USING: combinators concurrency.count-downs concurrency.futures
fry generalizations kernel macros sequences sequences.product ;
IN: concurrency.combinators
<PRIVATE
@ -11,17 +11,17 @@ IN: concurrency.combinators
PRIVATE>
: parallel-each ( seq quot -- )
: parallel-each ( seq quot: ( elt -- ) -- )
over length [
'[ _ curry _ spawn-stage ] each
] (parallel-each) ; inline
: 2parallel-each ( seq1 seq2 quot -- )
: 2parallel-each ( seq1 seq2 quot: ( elt1 elt2 -- ) -- )
2over min-length [
'[ _ 2curry _ spawn-stage ] 2each
] (parallel-each) ; inline
: parallel-filter ( seq quot -- newseq )
: parallel-filter ( seq quot: ( elt -- ? ) -- newseq )
over [ selector [ parallel-each ] dip ] dip like ; inline
<PRIVATE
@ -33,10 +33,13 @@ PRIVATE>
PRIVATE>
: parallel-map ( seq quot -- newseq )
: parallel-map ( seq quot: ( elt -- newelt ) -- newseq )
[future] map future-values ; inline
: 2parallel-map ( seq1 seq2 quot -- newseq )
: parallel-product-map ( seq quot: ( elt -- newelt ) -- newseq )
[ <product-sequence> ] dip parallel-map ;
: 2parallel-map ( seq1 seq2 quot: ( elt1 elt2 -- newelt ) -- newseq )
'[ _ 2curry future ] 2map future-values ;
<PRIVATE