[swift-evolution] [Accepted with modifications] SE-0045: Add scan, prefix(while:), drop(while:), and unfold to the stdlib

Matthew Johnson matthew at anandabits.com
Fri May 6 20:26:37 CDT 2016


> On May 6, 2016, at 8:15 PM, Dave Abrahams via swift-evolution <swift-evolution at swift.org> wrote:
> 
> 
> on Fri May 06 2016, Matthew Johnson <swift-evolution at swift.org <mailto:swift-evolution at swift.org>> wrote:
> 
>>> On May 6, 2016, at 7:30 PM, Dave Abrahams via swift-evolution <swift-evolution at swift.org> wrote:
>>> 
>>> 
>>> on Fri May 06 2016, Cole Campbell <swift-evolution at swift.org> wrote:
>>> 
>>>> I don't know if it's considered too late at this point to rename 'reduce', but
>>>> I'll add an enthusiastic +1 to renaming it to 'fold' and adding 'unfold'. 'Fold'
>>>> is just as obvious a name as 'reduce', IMO (actually I even prefer
>>>> it). 
>>> 
>>> It's not, IMO.  “Reduce” was chosen deliberately over “fold” because we
>>> think it is more in “common currency” among programmers, in no small
>>> part to the notice that MapReduce has gotten.
>> 
>> I was guessing this was the rationale.  But if it’s not too late and
>> “fold” solves the “unfold” naming problem maybe we that balances out
>> the equation.
> 
> Personally, I'm not confident “unfold” would be considered to meet the
> utility bar, even if we changed the name of “reduce,” FWIW.
> 
>> Which name do you think best communicates the essence of the
>> operation?  IMO “fold” does a much better job of this.
> 
> Personally I think “accumulate” does that better than either name, but
> it doesn't matter.  What matters, IMO, is what more people will be
> familiar with.

Fair enough.

FWIW, the reason I like fold is that it helps me to visualize the process mentally.

> 
>> 
>> 
>>> 
>>>> I think changing it now with other source-breaking changes is better
>>>> than moving forward with 'reduce' and a corresponding function with a
>>>> confusing name. Fold/unfold would fit in beautifully with the
>>>> prefix/suffix pairings already in the standard library.
>>>> 
>>>> Cole
>>>> 
>>>> On May 6, 2016, at 1:29 AM, David Hart via swift-evolution
>>>> <swift-evolution at swift.org> wrote:
>>>> 
>>>>   If we are discussing naming changes to reduce, here's my personal opinion:
>>>> 
>>>>   * When I first encountered it, I understood exactly what it did because I
>>>>   knew that term of art. If it was named sequence, I would have been confused.
>>>>   * If we are discussing name changes, I'd personally vote to change it to
>>>>   fold. It is the other term of art used for it, and it makes unfold work.
>>>> 
>>>>   David
>>>> 
>>>>   On 05 May 2016, at 22:39, Chris Lattner via swift-evolution
>>>>   <swift-evolution at swift.org> wrote:
>>>> 
>>>>           On May 5, 2016, at 1:03 PM, Erica Sadun <erica at ericasadun.com>
>>>>           wrote:
>>>> 
>>>>           On May 4, 2016, at 5:50 PM, Chris Lattner via swift-evolution
>>>>           <swift-evolution at swift.org> wrote:
>>>> 
>>>>               Proposal link:
>>>>               https://github.com/apple/swift-evolution/blob/master/proposals/0045-scan-takewhile-dropwhile.md
>>>> 
>>>>               Sequence.prefix(while:) & Sequence.drop(while:) - These are
>>>>               *accepted* as specified in revision 3 of the proposal.
>>>> 
>>>>           I'm still a little sad we didn't go for `prefix`/`suffix` or `take`/
>>>>           `drop` pairs that linguistically matched.Nonetheless I'm gratified
>>>>           these are hopping into the language. That said, I'm going to put on
>>>>           my painters cap to consider selecting some exterior latex for the
>>>>           feature I was most looking forward to in this proposal:
>>>> 
>>>>           Core team writes:
>>>> 
>>>>               unfold(_:applying:) - This addition is *rejected* by the core
>>>>               team as written, but deserves more discussion in the community,
>>>>               and potentially could be the subject of a future proposal. The
>>>>               core team felt that the utility of this operation is high enough
>>>>               to be worth including in the standard library, but could not
>>>>               find an acceptable name for it. “unfold” is problematic, despite
>>>>               its precedence in other language, because Swift calls the
>>>>               corresponding operation “reduce” and not “fold”. No one could
>>>>               get excited about “unreduce”. “iterate” was also considered, but
>>>>               a noun is more appropriate than an verb in this case. Given the
>>>>               lack of a good name, the core team preferred to reject to let
>>>>               the community discuss it more.
>>>> 
>>>>           A few thoughts:
>>>> 
>>>>           * I'm not sure why a noun is more appropriate than a verb. Reduce
>>>>           isn't a noun, prefix isn't a noun, drop isn't a noun. 
>>>> 
>>>>       I’m not a naming guru, but my understanding is that ‘reduce’ was picked
>>>>       because it was term of art (like map), which is what allowed the misuse
>>>>       of a verb.
>>>> 
>>>>       One idea that came out of the core team discussion was something like:
>>>> 
>>>>       sequence(from: 0) { $0 += 42 }
>>>> 
>>>>       Since it returns a sequence.
>>>> 
>>>>       -Chris
>>>> 
>>>>       _______________________________________________
>>>>       swift-evolution mailing list
>>>>       swift-evolution at swift.org
>>>>       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
>>>> 
>>>> _______________________________________________
>>>> swift-evolution mailing list
>>>> swift-evolution at swift.org
>>>> https://lists.swift.org/mailman/listinfo/swift-evolution
>>> 
>>> -- 
>>> Dave
>>> 
>>> _______________________________________________
>>> swift-evolution mailing list
>>> swift-evolution at swift.org
>>> https://lists.swift.org/mailman/listinfo/swift-evolution
>> 
>> _______________________________________________
>> 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>
> 
> -- 
> Dave
> 
> _______________________________________________
> 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>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20160506/d46bdaa7/attachment.html>


More information about the swift-evolution mailing list