[swift-evolution] [Review] SE-0161: Smart KeyPaths: Better Key-Value Coding for Swift
tony.allevato at gmail.com
Mon Apr 3 12:25:44 CDT 2017
On Thu, Mar 30, 2017 at 9:25 AM Douglas Gregor via swift-evolution <
swift-evolution at swift.org> wrote:
> Hello Swift community,
> The review of SE-0161 "Smart KeyPaths: Better Key-Value Coding for Swift"
> begins now and runs through April 5, 2017. The proposal is available here:
> Reviews are an important part of the Swift evolution process. All reviews
> should be sent to the swift-evolution mailing list at
> 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:
> Reply text
> Other replies
> 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?
+0.5. The concept is something the language very much needs, but please
reconsider reverting to the lightweight syntax of the original proposal—IMO
the version here is significantly worse in terms of legibility and
discourages its use by being noisy. The fact that keypaths have their own
nominal types that can be extended to introduce new behaviors makes it even
more critical that they be easy and clean to use. If this becomes they way
property behaviors are introduced into the language, the #keypath syntax
simply won't fly.
I too struggled with the lightweight syntax at first (unfortunately I
didn't have the time to weigh in on the original version of the proposal,
but I would have given it a +1 as originally written), but once I thought
about it more, I realized like many others that it lined up perfectly with
the syntax used for unbound method references. A "key path" is really just
an unbound property reference that also happens to be able to navigate more
deeply through the type graph. For that reason, it should use the same
syntax that unbound function references use.
I don't discount the argument that some have made that it's difficult to
distinguish between keypaths and static property expressions. If that's the
case, then the same problem *already exists* in Swift between unbound
method references and static property expressions. If that is deemed to be
a problem, we shouldn't fix it *only* for keypaths. Instead, keypaths
should be recognized as what they are—unbound property references—and use
the original syntax that aligned with unbound method references. *Then* we
should consider alternative syntaxes that would fix the problem for *both*
kinds of unbound references at once, in the same way.
> - Is the problem being addressed significant enough to warrant a
> change to Swift?
> Yes. Being able to refer to properties in an abstract way fills a big hole
in the language.
> - Does this proposal fit well with the feel and direction of Swift?
> Conceptually yes, but the #keypath syntax does not. It complicates what
should be an easy-to-use feature.
> - If you have used other languages or libraries with a similar
> feature, how do you feel that this proposal compares to those?
> Just Objective-C, whose notion of keypaths differs from what is trying to
be done for Swift.
> - How much effort did you put into your review? A glance, a quick
> reading, or an in-depth study?
> Followed the original discussions and first review thread.
> More information about the Swift evolution process is available at
> Thank you,
> Review Manager
> swift-evolution mailing list
> swift-evolution at swift.org
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the swift-evolution