<html><head><meta http-equiv="Content-Type" content="text/html charset=us-ascii"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><br class=""><div><blockquote type="cite" class=""><div class="">On Jan 22, 2017, at 10:56 PM, Chris Eidhof &lt;<a href="mailto:chris@eidhof.nl" class="">chris@eidhof.nl</a>&gt; wrote:</div><br class="Apple-interchange-newline"><div class=""><div dir="ltr" class=""><div class="">Not as a direct reply to Russ, but just to reiterate: to me, there are two clear benefits of using the `inout` version of reduce:<br class=""></div><div class=""><br class=""></div><div class="">1. The performance (currently discussed at length)</div><div class="">2. Readability (because we can use mutating methods on `inout` arguments).</div><div class=""><br class=""></div><div class="">Even if the compiler were to optimize the unnecessary copy of `return arr + [el]` away, there are still a lot of other mutable methods that you might want to use within the reduce closure. So I think the proposal is still very valid even if the compiler optimizations would magically appear tomorrow.</div><div class=""><br class=""></div><div class="">To push this proposal forward a little bit, I'd like to come up with a good name. It seems like we shouldn't overload `reduce`, but choose a different name, so that we don't stress the typechecker. Any other suggestions?</div></div><div class="gmail_extra"><br class=""><div class="gmail_quote">On Mon, Jan 23, 2017 at 7:11 AM, Russ Bishop <span dir="ltr" class="">&lt;<a href="mailto:xenadu@gmail.com" target="_blank" class="">xenadu@gmail.com</a>&gt;</span> wrote:</div>-- <br class=""><div class="gmail_signature" data-smartmail="gmail_signature">Chris Eidhof</div>
</div>
</div></blockquote></div><br class=""><div class=""><br class=""></div><div class="">Sorry for the derail!</div><div class=""><br class=""></div><div class="">reduce(mutating:_:) { } is still my favorite; You can take mutating to mean we will copy the value now but mutate it later.</div><div class=""><br class=""></div><div class=""><br class=""></div><div class="">Some alternatives:</div><div class=""><br class=""></div><div class="">reduce(forMutating:_:) { }</div><div class=""><br class=""></div><div class="">reduce(forInout:_:) { }</div><div class=""><br class=""></div><div class="">reduce(initial:_:) { }</div><div class=""><br class=""></div><div class="">reduce(copying:mutate:) { }</div><div class=""><br class=""></div><div class=""><div class="">// just kidding...</div><div class="">reduce(copyForLaterMutating:_:) { }</div></div><div class=""><br class=""></div><div class=""><br class=""></div><div class=""><br class=""></div><div class="">It should definitely be some form of reduce.&nbsp;</div><div class=""><br class=""></div><div class="">Russ</div></body></html>