[swift-evolution] [Review] SE-0065 A New Model for Collections and Indices

Dave Abrahams dabrahams at apple.com
Tue Apr 12 17:43:41 CDT 2016


Thanks for your review, Tony!

on Mon Apr 11 2016, Tony Parker <swift-evolution at swift.org> wrote:

>> On Apr 10, 2016, at 2:41 PM, Chris Lattner via swift-evolution <swift-evolution at swift.org> wrote:
>> 
>> Hello Swift community,
>> 
>> The review of "A New Model for Collections and Indices" begins now and runs through April 18th. The proposal is available here:
>
>> 
>> 	https://github.com/apple/swift-evolution/blob/master/proposals/0065-collections-move-indices.md
>> 
>> Reviews are an important part of the Swift evolution process. All reviews should be sent to the swift-evolution mailing list at:
>> 	https://lists.swift.org/mailman/listinfo/swift-evolution
>> or, if you would like to keep your feedback private, directly to the review manager.
>> 
>> 
>> What goes into a review?
>> 
>> The goal of the review process is to improve the proposal under
>> review through constructive criticism and, eventually, determine the
>> direction of Swift. When writing your review, here are some
>> questions you might want to answer in your review:
>> 
>> 	* What is your evaluation of the proposal?
>
> I agree with the general direction and scope of the proposal, but I
> think the names could use some changes. Specifically, I don’t think
> the fallback to ‘form’ is required. 

It's not a fallback whatsoever.  The updated guidelines referenced from
https://github.com/apple/swift-evolution/blob/master/proposals/0059-updated-set-apis.md
(which was accepted this morning; announcement forthcoming) make the
“form” prefix a first-class citizen that one chooses based on the
noun-ness of the underlying operation.  Furthermore, *treating*
“formXXX” as a fallback and avoiding it will continue to strengthen the
sense that it's not something we should normally use, leading to more
naming arguments in the future.  It's a strong guideline and as long as
we have it, we shouldn't be afraid to apply it, thereby increasing
uniformity and predictability.

[To all my fellow “InPlace” lovers out there: yes, another guideline
might be more optimal, but this is the guideline we have/can get].

> It would be a significant readability improvement to use a meaningful
> verb to describe the action of altering the argument. The methods that
> create new indices probably need a label on the first argument,
> because otherwise it looks as if the IndexDistance is what is
> described by ‘index’.
>
> Proposed:
>
>   func successor(of i: Index) -> Index
>   func formSuccessor(i: inout Index)
>
> Instead, I suggest:
>
>   func successor(of i : Index) -> Index
>   func advance(i: inout Index)

Why is that an improvement?  It loses the correspondence between the
operations, which are still a mutating/nonmutating pair.  What's it got
to recommend it?  I have the same question about all of the suggestions
below.

> Proposed:
>
>   func index(n: IndexDistance, stepsFrom i: Index) -> Index
>   func index(n: IndexDistance, stepsFrom i: Index, limitedBy limit: Index) -> Index
>   func formIndex(n: IndexDistance, stepsFrom i: inout Index)
>   func formIndex(n: IndexDistance, stepsFrom i: inout Index, limitedBy limit: Index)
>
> Suggested (taking into account Nate’s suggestion of reversing the order):
>
>   func index(startingAt i: Index, movedBy n: IndexDistance) -> Index
>   func index(startingAt i: Index, movedBy n: IndexDistance, limitedBy limit: Index) -> Index

I find Nate Cook's concerns about the use of “index” here (a mental
clash with unrelated methods having the same basename) especially
convincing.  So I think I want to look for other names for these.

>   
>   func move(i : inout Index, by n: IndexDistance) 
>   func move(i : inout Index, by n: IndexDistance, limitedBy limit: Index)
>
> Proposed:
>
>   func predecessor(of i: Index) -> Index
>   func formPredecessor(i: inout Index)
>
> Suggested:
>
>   func predecessor(of i: Index) -> Index
>   func reverse(i: inout Index)
>
> I think reversing an index has some nice symmetry with reversing a
> sequence, but if it seems to confusing, then replace advance and
> reverse with ‘moveForward’ and ‘moveBackward’.

Yeah, I don't think moving an index one step backwards could reasonably
be called “reversing” it.  “moveBackward” is reasonable, if one wanted
have to break the relationship with predecessor.

>
>
> - Tony
>
>> 	* Is the problem being addressed significant enough to warrant a change to Swift?
>> 	* Does this proposal fit well with the feel and direction of Swift?
>> 	* If you have you used other languages or libraries with a similar feature, how do you feel that this proposal compares to those?
>> 	* How much effort did you put into your review? A glance, a quick reading, or an in-depth study?
>> 
>> More information about the Swift evolution process is available at
>> 
>> 	https://github.com/apple/swift-evolution/blob/master/process.md
>> 
>> Thank you,
>> 
>> -Chris Lattner
>> Review Manager
>> 
>> 
>> _______________________________________________
>> 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



More information about the swift-evolution mailing list