Sounds reasonable. As long as the join points (where multiple promises are queued until one/all have a value) can be composed again this is great.btw, with the default plan configuration, it will spawn a thread per independent block (associated by & ), it will rely on the Result mechanism (the sync on demand) to spawn a third thread that is the one that converges both results, and executes the last block with the two previous executions.
2014-06-23 10:00 GMT+02:00 Santiago Bragagnolo <santiagobragagnolo@gmail.com>:
Ok, i was thinking more for use the same async handler for all the futures, now i read better the handler, for that kind of thing we have something similar,what is PlanIT, you should be able to do something like(TKTPlan plan => ( [ 1+1 ] & [ 2+2 ]) => [ : fst :snd | fst + snd ]) run == 6.PlanIT is not yet documented and is not fully developed, but it has some nice tests that shows some of the powers2014-06-23 9:07 GMT+02:00 Norbert Hartl <norbert@hartl.name>:
Nice! Can you group promises? Like( [ 1 + 1 ] shootIt , [ 2 + 2 ] shootIt ) onSuccess: [ :values | (values first + values second ) = 6 ]?NorbertIt counts with a chapter in pharo enterprise book and some cool tests.Task IT is package that provides a cool way to deal with processes. Even when this version is stable, it still in design and we want to make it consistent and powerfull.Hi all, im glad to announce TaskIT. You may already knew about, after all it's not confidential ;) and it has documentation on-going since some months ago.
The main easy things to do with this revision are:" closures "val := [ 2+2 ] shootIt.val isKindOf: TKTFuture.val onSuccess: [: rslt | rslt == 4 ] "async"
val value == 4. " sync "
rslt := [ 2+2 ] shootIt asResult.rslt == 4 "sync on demand"" objects "val := 2 paralellize + 2.val == 4 "sync on demand"" staying in tune "val := [ "some task" ] shootIt asStickyReference.
val := nil." sticky means that if this future is taken by the GC, it will kill the process"" looping "val := server paralellize looping serveOnce: anyParameter asStickyReference.
"this will execute in a new process, in a loop, server serveOnce: anyParameter."You can stop it by doing
val:= nil."or using a disgusting magic variable, for that check the samples :). But do not rely on that kind of things, because it will not be supported "
For more advanced and cool usages, check the Doc.FAQ:
1- Yes, the "sync" on demand is implemented with a proxy and a become.2- Yes, we are changing the API of the processes that persist in time.
CREDITS
All CAR team in general was great inspiration, particularly, Guille Polito full operational commiter and of course is always a good idea to discuss with him, Nick Papoylias, is also great to discuss with him. Luc, Noury, Jannik: several ideas are discussed with them as well, and they always gave me support.
and from RMOD Esteban Lorenzano, also discussing and proposing.Thanks all :).OTHERS:If you want to go to the darkside (dark because is not documented yet, but in the case of PoolIT, that it has some doc ) you can also add to your combo:
ActIT: a simple Actor extention for taskit.ForkIT: an extention that runs blocks in background image (it adds a nice button to the test runner, letting you run all your tests in a background image and installing the results after the execution)
PoolIT: it adds a pool of workers, it consumes tasks and ensure you a limited amount of threads.PlanIT: a basic and not yet full developed algebra for composing processes.
I encourage you to use it, it is being used in PhaROS since a lot of time. And please any bug and enhancements, you can contact us. Since we are working on the next version is a good time to define what features are really needed.
Salut.
Santiago. .