Hi, I really think we should have an efficient way to chain operations on collections and alike. In my personal opinion, this should be backed by transducers, as they decouple the operations from the type the data source and sink. Hence they are applicable to different collection types, streams and so on. Also, transducers allow for straight-forward parallization of operations that are concurrency-safe.
However, the transducers port is not complete yet. I think I'll finish it in October/November, but definitely this year. Maybe this could be a starting point to discuss how to move forward? One related question: Is there a somewhat comprehensive benchmark yielding a baseline of Pharo's collection/streams/iteration performance? I'd really like to compare the existing implemenation to the alternative approaches. Best regards, Steffen Am .09.2019, 11:30 Uhr, schrieb Kasper Østerbye <kasper.oster...@gmail.com>:
On 10 September 2019 at 00.56.28, Richard O'Keefe (rao...@gmail.com) wrote: Does that sound like a way forward? I could convert my implementation of this interface to Pharo if people would like me to. Hi Richard, It seems like what you propose (in sofar as I understand it) is already present in at least three other libraries which have not yet made it to the core of Pharo: The Iterator framework Julien is working on: https://github.com/juliendelplanque/Iterators The XStreams framework: https://code.google.com/archive/p/xtreams/ <https://code.google.com/archive/p/xtreams/> The transducers: https://github.com/Pharophile/Transducers <https://github.com/Pharophile/Transducers> I was not aware of the virtual collections from Strongtalk. I am aware you know them (as you commented on the Iterators Julien proposed). I have been working with the LINQ stream/iterator framework in C#, and found that to be a rather sound library, lazy evaluation. The streams in Java are also nice, and are actually very good at exploiting multi cores. It is sad there is no lazy streams in the core of Pharo, and I would find it intersting to participate in a project to build one. Best, Kasper