> On Apr 6, 2017, at 21:46 , John McCall <rjmcc...@apple.com> wrote:
> 
>> On Apr 7, 2017, at 12:27 AM, Rick Mann <rm...@latencyzero.com> wrote:
>>> On Apr 6, 2017, at 20:37 , John McCall <rjmcc...@apple.com> wrote:
>>> 
>>>> On Apr 6, 2017, at 9:28 PM, Rick Mann via swift-evolution 
>>>> <swift-evolution@swift.org> wrote:
>>>> I tend to dislike the backslash as well, but can't suggest a good 
>>>> alternative.
>>>> 
>>>> Does any of this allow for operations within the key path? e.g. 
>>>> Department.employees.@sum.salary?
>>> 
>>> You can express things like this in the feature as proposed using 
>>> subscripts:
>>> 
>>> extension Collection {
>>> subscript<T: Integer>(summing path: KeyPath<Element, T>) -> T {
>>>  var sum: T = 0
>>>  for let elt in self {
>>>    sum += elt[keyPath: path]
>>>  }
>>>  return sum
>>> }
>>> }
>> 
>> I'm just remembering how AppKit/Cocoa lets you do things like this in a very 
>> expressive way. Your proposal seems a bit cumbersome. Maybe when we have 
>> custom annotations, they can be extended to use within key paths.
> 
> I'm not seriously endorsing this exact spelling.  It would be much better to 
> be able to write something like:
>  \Department.employees.sum(of: \.salary)
> However, since "sum" would presumably be a method on Collection, I think this 
> would have to be a future extension to the proposal, and the overall thing 
> might have to be a function rather than a key path because it would no longer 
> have identity.
> 
> Also, I do feel obliged to note that AppKit/Cocoa's "very expressive" way of 
> doing this is a small number of hard-coded operators, whereas even the 
> kindof-unfortunate subscript trick would be arbitrarily extensible.

Agreed. Whatever it is we come up with, I'd want it to be fully extensible, I 
just hope it's concise at the point of use.

Thanks!

> 
> John.
> 
> 
>> 
>> Thanks.
>> 
>>> 
>>> ...
>>> 
>>> \Department.employees[summing: \.salary]
>>> 
>>> That's not actually a good name for the subscript, but maybe there's one 
>>> out there.
>>> 
>>> John.
>>> 
>>>> 
>>>> Also, in this example:
>>>> 
>>>> let firstFriendsNameKeyPath = \Person.friends[0].name
>>>> let firstFriend = luke[keyPath: firstFriendsNameKeyPath] // "Han Solo"
>>>> 
>>>> Can't we do without the keyPath: argument name? The compiler knows it's a 
>>>> keypath, it would be nicer to write
>>>> 
>>>> let firstFriend = luke[firstFriendsNameKeyPath] // "Han Solo"
>>>> 
>>>>> On Apr 5, 2017, at 16:56 , Douglas Gregor via swift-evolution 
>>>>> <swift-evolution@swift.org> wrote:
>>>>> 
>>>>> Hello Swift community,
>>>>> 
>>>>> The second review of SE-0161 "Smart KeyPaths: Better Key-Value Coding for 
>>>>> Swift" begins now and runs through April 9, 2017. The revised proposal is 
>>>>> available here:
>>>>> 
>>>>> https://github.com/apple/swift-evolution/blob/master/proposals/0161-key-paths.md
>>>>> The core team’s feedback from the first review of this proposal can be 
>>>>> viewed at:
>>>>> 
>>>>> https://lists.swift.org/pipermail/swift-evolution-announce/2017-April/000342.html
>>>>> 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. When replying, please try to keep the proposal link at 
>>>>> the top of the message:
>>>>> 
>>>>> Proposal link:
>>>>> 
>>>>> https://github.com/apple/swift-evolution/blob/master/proposals/0161-key-paths.md
>>>>> Reply text
>>>>> Other replies
>>>>> 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?
>>>>>   • 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 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,
>>>>> 
>>>>> -Doug
>>>>> 
>>>>> Review Manager
>>>>> 
>>>>> _______________________________________________
>>>>> swift-evolution mailing list
>>>>> swift-evolution@swift.org
>>>>> https://lists.swift.org/mailman/listinfo/swift-evolution
>>>> 
>>>> 
>>>> -- 
>>>> Rick Mann
>>>> rm...@latencyzero.com
>>>> 
>>>> 
>>>> _______________________________________________
>>>> swift-evolution mailing list
>>>> swift-evolution@swift.org
>>>> https://lists.swift.org/mailman/listinfo/swift-evolution
>> 
>> 
>> -- 
>> Rick Mann
>> rm...@latencyzero.com
>> 
>> 
> 


-- 
Rick Mann
rm...@latencyzero.com


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

Reply via email to