Yes please to Int indexes.

One of the things I despise most about the Collection protocol is how it allows 
for arbitrary index types. That, IMO, was an awful, awful mistake.

Dave

> On Jan 10, 2018, at 11:45 AM, C. Keith Ray via swift-evolution 
> <swift-evolution@swift.org> wrote:
> 
> Simple is better. Int indexes, please. 
> 
> --
> C. Keith Ray
> 
> * https://leanpub.com/wepntk <https://leanpub.com/wepntk> <- buy my book?
> * http://www.thirdfoundationsw.com/keith_ray_resume_2014_long.pdf 
> <http://www.thirdfoundationsw.com/keith_ray_resume_2014_long.pdf>
> * http://agilesolutionspace.blogspot.com/ 
> <http://agilesolutionspace.blogspot.com/>
> 
> On Jan 10, 2018, at 10:44 AM, Karl Wagner via swift-evolution 
> <swift-evolution@swift.org <mailto:swift-evolution@swift.org>> wrote:
> 
>> 
>> 
>>> On 10. Jan 2018, at 17:22, Paul Cantrell via swift-evolution 
>>> <swift-evolution@swift.org <mailto:swift-evolution@swift.org>> wrote:
>>> 
>>>> What is your evaluation of the proposal?
>>> 
>>> +1. Yes please. Long overdue.
>>> 
>>>> Is the problem being addressed significant enough to warrant a change to 
>>>> Swift?
>>> 
>>> It’s a long-standing sore thumb. The proposal’s evidence of community 
>>> demand fits my own experience: I’ve wanted this on multiple occasions.
>>> 
>>>> Does this proposal fit well with the feel and direction of Swift?
>>> 
>>> Yes, and in particular, on the name bikeshedding:
>>> 
>>> I favor property names with the “all” prefix, whether allValues or 
>>> allCases. Looking over my own code, I’ve almost always used the word “all” 
>>> for this when I had to hand-roll it — and either allValues or allCases make 
>>> reasonable sense in my code when I substitute them.
>>> 
>>> Whichever protocol name we choose, the property name should be consistent:
>>> 
>>>     ValueEnumerable → allValues
>>>     CaseEnumerable → allCases
>>> 
>>> Either ValueEnumerable or CaseEnumerable would be a fine name. Contra 
>>> Chris, I slightly prefer ValueEnumerable, because it extends to situations 
>>> where we still want to enumerate a fixed set of possibilities which don’t 
>>> strictly correspond to enum cases but still have that sort of flavor. For 
>>> example, one might want:
>>> 
>>>     enum SideOfBody
>>>       {
>>>       case left
>>>       case right
>>>       }
>>> 
>>>     enum Limb: ValueEnumerable
>>>       {
>>>       case arm(SideOfBody)
>>>       case leg(SideOfBody)
>>> 
>>>       static let allValues =
>>>         [
>>>         arm(.left),
>>>         arm(.right),
>>>         leg(.left),
>>>         leg(.right)
>>>         ]
>>>       }
>>> 
>>> To my eyes, this code reads better than it would with CaseEnumerable / 
>>> allCases.
>>> 
>>>> If you have used other languages or libraries with a similar feature, how 
>>>> do you feel that this proposal compares to those?
>>> 
>>> Java’s enums had this from the beginning, and Josh Bloch’s design for that 
>>> feature has always worked nicely. Java’s design is slightly different: 
>>> `Foo.values()` returns Foo[]. However, Swift doesn’t need to follow either 
>>> that name or type choice: (1) Java doesn’t use the term “case” as Swift 
>>> does, (2) the “all” prefix better fits Swift’s API guidelines IMO, and (3) 
>>> using a concrete array type has as opposed to Collection has different 
>>> implications in Java than it does Swift.
>>> 
>>> I _do_ agree  that the proposal should consider constraining the Collection 
>>> to be Int-indexed. Why should it ever be otherwise? What’s the motivation 
>>> for leaving that open?
>>> 
>>>> How much effort did you put into your review? A glance, a quick reading, 
>>>> or an in-depth study?
>>> 
>>> Medium quick study.
>>> 
>>> Cheers, P
>>> 
>>> _______________________________________________
>>> swift-evolution mailing list
>>> swift-evolution@swift.org <mailto:swift-evolution@swift.org>
>>> https://lists.swift.org/mailman/listinfo/swift-evolution 
>>> <https://lists.swift.org/mailman/listinfo/swift-evolution>
>> 
>> 
>> I don’t agree that the Collection should be Int-indexed. Source-order is not 
>> a very strong guarantee IMO, and it wouldn’t be good if people started 
>> writing things like "MyEnum.allValues[3]” to reference a specific case.
>> 
>> If you know the specific case you are looking for, just write it directly. 
>> If you found an interesting case while iterating allValues, remember its 
>> (opaque) index and come back to it later.
>> 
>> I’m not a fan of Int-indexes in general. It’s practical to allow it for 
>> Array, but in general, for generic Collections, I think it implies an awful 
>> lot of knowledge about the Collection’s contents.
>> 
>> - Karl
>> _______________________________________________
>> swift-evolution mailing list
>> swift-evolution@swift.org <mailto:swift-evolution@swift.org>
>> https://lists.swift.org/mailman/listinfo/swift-evolution 
>> <https://lists.swift.org/mailman/listinfo/swift-evolution>
> _______________________________________________
> swift-evolution mailing list
> swift-evolution@swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution

_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to