[swift-evolution] Support Transducers

Joe Groff jgroff at apple.com
Fri Dec 25 13:47:20 CST 2015


> On Dec 25, 2015, at 11:15 AM, Matthew Johnson via swift-evolution <swift-evolution at swift.org> wrote:
> 
> 
> 
> Sent from my iPad
> 
> On Dec 25, 2015, at 11:53 AM, Dmitri Gribenko via swift-evolution <swift-evolution at swift.org <mailto:swift-evolution at swift.org>> wrote:
> 
>> On Fri, Dec 25, 2015 at 9:07 AM, Jason Jobe via swift-evolution
>> <swift-evolution at swift.org <mailto:swift-evolution at swift.org>> wrote:
>>> 
>>> Okay,
>>> 
>>> I would like to propose that Transducers be considered for addition to the Swift core.
>>> 
>>> "Transducers are a powerful and composable way to build algorithmic transformations that you can reuse in many contexts…"
>>> 
>>> There are ways to build them w/out any language modification but they are not as efficient as alternative expressions.
>> 
>> Hi Jason,
>> 
>> I was playing with a similar idea here:
>> 
>> https://github.com/apple/swift/blob/master/test/Prototypes/CollectionTransformers.swift <https://github.com/apple/swift/blob/master/test/Prototypes/CollectionTransformers.swift>
>> 
>> You wouldn't find the word 'transducer' there, but it is based on
>> similar principles, except it also allows you to optimize the AST of
>> the transformation, and it is structured in such a way that would
>> allow us to automatically parallelize the whole pipeline.
>> 
> 
> It's great to see you experimenting with this!
> 
> It's unrelated but one comment in there jumped out at me:
> // As sad as it is, I think for practical performance reasons we should rewrite
> // the inner parts of the fork-join framework in C++.  In way too many cases
> // than necessary Swift requires an extra allocation to pin objects in memory
> // for safe multithreaded access.  -Dmitri
> 
> 
> 
> 
> 
> I agree this is sad, but also hope it is only a temporary situation (as with other performance related concerns).  Any thoughts on that?

There's the intermediate possibility of using SIL to write these, which will give exact control over when copies and retains happen without dropping down to C++ and dealing with the fragility of maintaining common ABIs between Swift/C++ functions and the loss of high-level optimization opportunity.

-Joe

>> Dmitri
>> 
>> -- 
>> main(i,j){for(i=2;;i++){for(j=2;j<i;j++){if(!(i%j)){j=0;break;}}if
>> (j){printf("%d\n",i);}}} /*Dmitri Gribenko <gribozavr at gmail.com <mailto:gribozavr at gmail.com>>*/
>> _______________________________________________
>> swift-evolution mailing list
>> swift-evolution at swift.org <mailto:swift-evolution at swift.org>
>> https://lists.swift.org/mailman/listinfo/swift-evolution <https://lists.swift.org/mailman/listinfo/swift-evolution>
> 
> _______________________________________________
> swift-evolution mailing list
> swift-evolution at swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20151225/0d7479c1/attachment.html>


More information about the swift-evolution mailing list