<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">By the way, does anybody know why the proposed syntax require a leading period for the key path?<div class=""><br class=""></div><div class=""><font face="Menlo" class="">#keyPath(Family, <font color="#ff0000" class="">.</font>pets.first)</font></div><div class=""><br class=""></div><div class="">In other words, why not just this:</div><div class=""><br class=""></div><div class=""><div class=""><font face="Menlo" class="">#keyPath(Family, pets.first)</font></div></div><div class=""><font face="Menlo" class=""><br class=""></font></div><div class=""><br class=""></div><div class="">Or Brent's proposed:</div><div class=""><br class=""></div><div class=""><div class=""><font face="Menlo" class="">#keyPath&lt;Family&gt;(pets.first)</font></div></div><div class=""><font face="Menlo" class=""><br class=""></font></div><div class=""><font face="Menlo" class=""><br class=""></font></div><div class=""><font face="Menlo" class=""><br class=""></font></div><div class=""><font face="Menlo" class=""><br class=""></font></div><div class=""><div><blockquote type="cite" class=""><div class="">On Apr 3, 2017, at 2:08 AM, Brent Royal-Gordon via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" class="">swift-evolution@swift.org</a>&gt; wrote:</div><br class="Apple-interchange-newline"><div class=""><div class=""><blockquote type="cite" class="">Proposal link: <a href="https://github.com/apple/swift-evolution/blob/master/proposals/0161-key-paths.md" class="">https://github.com/apple/swift-evolution/blob/master/proposals/0161-key-paths.md</a><br class=""></blockquote><br class=""><blockquote type="cite" class=""><span class="Apple-tab-span" style="white-space:pre">        </span>• What is your evaluation of the proposal?<br class=""></blockquote><br class="">I continue to believe that the chosen syntax is unnecessarily cumbersome, that the design is overly conservative in terms of making sure people never "accidentally" use the feature, and that we could do a lot better.<br class=""><br class="">But let's not throw the baby out with the bathwater. This is an *excellent* proposal which addresses a real pain point for Swift users in a way that's far better than not only the status quo, but any design Objective-C could have offered. The only problem is that the syntax is ugly, and we can always sugar it up later, once the community and core team are more comfortable with the feature.<br class=""><br class="">(However, I will make one last-ditch syntax suggestion: `#keyPath&lt;Family&gt;(.pets.first)`, where the generic parameter list can be omitted when it can be inferred from context. I think juxtaposing `&lt;&gt;` and `()` is clearer than a comma followed by a dot.)<br class=""><br class=""><blockquote type="cite" class=""><span class="Apple-tab-span" style="white-space:pre">        </span>• Is the problem being addressed significant enough to warrant a change to Swift?<br class=""></blockquote><br class="">How many "Swift isn't dynamic" blog posts have we all seen? This begins to address their concerns.<br class=""><br class="">How many code generation solutions have people come up with for lenses? This lets us get rid of them *and* it's more efficient.<br class=""><br class="">How many classes inherit from `NSObject` solely for introspection? This will let some of those convert to native Swift classes.<br class=""><br class="">Yes, it's a very significant problem.<br class=""><br class=""><blockquote type="cite" class=""><span class="Apple-tab-span" style="white-space:pre">        </span>• Does this proposal fit well with the feel and direction of Swift?<br class=""></blockquote><br class="">Yes; the lack of a property equivalent to unbound methods has always been a gaping hole in the language, the clever type design is particularly Swifty. I don't like the `#keyPath` part of the syntax, but the property/subscript chain with optional chaining is super-Swifty as well. <br class=""><br class=""><blockquote type="cite" class=""><span class="Apple-tab-span" style="white-space:pre">        </span>• If you have used other languages or libraries with a similar feature, how do you feel that this proposal compares to those?<br class=""></blockquote><br class="">In most respects, this is vastly superior to Objective-C KVC. I've never used another language's lenses in anger, but I'm familiar with the theory of them, and this proposal seems like a better solution than those too.<br class=""><br class=""><blockquote type="cite" class=""><span class="Apple-tab-span" style="white-space:pre">        </span>• How much effort did you put into your review? A glance, a quick reading, or an in-depth study?<br class=""></blockquote><br class="">Does talking about it on the list a lot count?<br class=""><br class="">-- <br class="">Brent Royal-Gordon<br class="">Architechies<br class=""><br class="">_______________________________________________<br class="">swift-evolution mailing list<br class=""><a href="mailto:swift-evolution@swift.org" class="">swift-evolution@swift.org</a><br class="">https://lists.swift.org/mailman/listinfo/swift-evolution<br class=""></div></div></blockquote></div><br class=""></div></body></html>