<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body><div>On Thu, Mar 30, 2017, at 12:25 PM, Douglas Gregor wrote:<br></div>
<blockquote style="margin: 2px 0px; padding: 0.2em 0.75em; border-left-width: 2px; border-left-style: solid; border-top-left-radius: 8px; border-top-right-radius: 8px; border-bottom-right-radius: 8px; border-bottom-left-radius: 8px; color: rgb(43, 73, 125); background-color: rgb(232, 236, 242);" type="cite"><ul style="margin: 0px 0px 16px; padding: 0px 0px 0px 2em; list-style: disc; color: rgb(36, 41, 46); font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 16px; background-color: rgb(255, 255, 255);"><li style="margin: 5px 0px; padding: 0px;">What is your evaluation of the proposal?<br></li></ul></blockquote><div style="font-family: Arial;"><br></div>
<div style="font-family: Arial;">Weak +0.5. This is absolutely needed, and I don't want to see the feature broken down any further through interminable bikeshedding, so I'd be more willing to let it ride as-is than miss out on having this feature.<br></div>
<div style="font-family: Arial;"><br></div>
<div style="font-family: Arial;">I was personally quite happy with the original proposal text. Worrying about interaction with type properties reminds me of the pearl-clutching when lightweight generics were added to ObjC over ambiguity with protocol conformance statements, to which, IIRC, the involved people stated, "Don't worry. The compiler's got this. It's its job."<br></div>
<div style="font-family: Arial;"><br></div>
<div style="font-family: Arial;">I can't really get behind a syntax with this amount of clunkiness. The second example — `foo[keyPath: #keyPath(.bar.baz)]` —&nbsp;is egregious. Perhaps the proposal is right that you'd rarely see it, but I take umbrage with "never". Teaching smart key paths will require building up from base principles just like the proposal, and from that perspective it looks like a syntax designed out of compatibility concerns in a much older language, not the best it could be on its own.<br></div>
<div style="font-family: Arial;"><br></div>
<div style="font-family: Arial;">The leading dot inference is extremely desirable to limit repetition, but the difference in behavior with lookup for #selector and ObjC-style #keyPath will be confusing for many. "Why was it not compiling?" "You have a leading dot when you shouldn't." That doesn't sound like a satisfying experience unless the diagnostic is truly superlative.<br></div>
<div style="font-family: Arial;"><br></div>
<div style="font-family: Arial;">Ultimately, the Core Team and the community have to make an opinionated decision about this feature's impact on the language. Though I understand (and believe in) progressive disclosure, I don't think it behooves us to "hide" "advanced" syntax. `#foo` sigils feel like compatibility-driven hacks. If, like me, you think unbounded methods and unbounded properties form the lowercase-f foundation for Swift's answer to Cocoa-quality dynamism, then the feature should have that policy reflected appropriately in its syntax.<br></div>
<div style="font-family: Arial;"><br></div>
<blockquote style="margin: 2px 0px; padding: 0.2em 0.75em; border-left-width: 2px; border-left-style: solid; border-top-left-radius: 8px; border-top-right-radius: 8px; border-bottom-right-radius: 8px; border-bottom-left-radius: 8px; color: rgb(43, 73, 125); background-color: rgb(232, 236, 242);" type="cite"><ul style="margin: 0px 0px 16px; padding: 0px 0px 0px 2em; list-style: disc; color: rgb(36, 41, 46); font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 16px; background-color: rgb(255, 255, 255);"><li style="margin: 0.25em 0px 5px; padding: 0px;">Is the problem being addressed significant enough to warrant a change to Swift?<br></li></ul></blockquote><div style="font-family: Arial;"><br></div>
<div style="font-family: Arial;">Absolutely. See what I say above — the time is right for well-considered, powerful, but low-impact language additions. Key-paths would be a sea-change for data-flow (reactive, etc.) frameworks and for DSLs.<br></div>
<div style="font-family: Arial;"><br></div>
<blockquote style="margin: 2px 0px; padding: 0.2em 0.75em; border-left-width: 2px; border-left-style: solid; border-top-left-radius: 8px; border-top-right-radius: 8px; border-bottom-right-radius: 8px; border-bottom-left-radius: 8px; color: rgb(43, 73, 125); background-color: rgb(232, 236, 242);" type="cite"><ul style="margin: 0px 0px 16px; padding: 0px 0px 0px 2em; list-style: disc; color: rgb(36, 41, 46); font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 16px; background-color: rgb(255, 255, 255);"><li style="margin: 0.25em 0px 5px; padding: 0px;">Does this proposal fit well with the feel and direction of Swift?<br></li></ul></blockquote><div style="font-family: Arial;"><br></div>
<div style="font-family: Arial;">The feature — yes. The syntax — not quite.<br></div>
<div style="font-family: Arial;"><br></div>
<blockquote style="margin: 2px 0px; padding: 0.2em 0.75em; border-left-width: 2px; border-left-style: solid; border-top-left-radius: 8px; border-top-right-radius: 8px; border-bottom-right-radius: 8px; border-bottom-left-radius: 8px; color: rgb(43, 73, 125); background-color: rgb(232, 236, 242);" type="cite"><ul style="margin: 0px 0px 16px; padding: 0px 0px 0px 2em; list-style: disc; color: rgb(36, 41, 46); font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 16px; background-color: rgb(255, 255, 255);"><li style="margin: 0.25em 0px 5px; padding: 0px;">If you have used other languages or libraries with a similar feature, how do you feel that this proposal compares to those?<br></li></ul></blockquote><div style="font-family: Arial;"><br></div>
<div style="font-family: Arial;">I've extensively used Cocoa's similar features. I can see, perhaps just barely, where AnyKeyPath would be NSKeyPath in another universe, and in that sense it's a great accomplishment building out these features for Swift.<br></div>
<div style="font-family: Arial;"><br></div>
<blockquote style="margin: 2px 0px; padding: 0.2em 0.75em; border-left-width: 2px; border-left-style: solid; border-top-left-radius: 8px; border-top-right-radius: 8px; border-bottom-right-radius: 8px; border-bottom-left-radius: 8px; color: rgb(43, 73, 125); background-color: rgb(232, 236, 242);" type="cite"><ul style="margin: 0px 0px 16px; padding: 0px 0px 0px 2em; list-style: disc; color: rgb(36, 41, 46); font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 16px; background-color: rgb(255, 255, 255);"><li style="margin: 0.25em 0px 5px; padding: 0px;">How much effort did you put into your review? A glance, a quick reading, or an in-depth study?<br></li></ul></blockquote><div style="font-family: Arial;"><br></div>
<div style="font-family: Arial;">In-depth study of the original proposal; followed the mailing list threads; quick re-review of the modified proposal.<br></div>
<div style="font-family: Arial;"><br></div>
<div><div class="defanged25-signature"><div style="color: rgb(31, 31, 31); font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Fira Sans', 'Droid Sans', 'Helvetica Neue', Arial, sans-serif; font-size: 13px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: -0.10000000149011612px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;"><div class="defanged25-signature"><span class="font" style="font-family:arial, sans-serif, sans-serif">Sincerely,</span><br></div>
<div class="defanged25-signature"><span class="font" style="font-family:arial, sans-serif, sans-serif">&nbsp; Zachary Waldowski</span><br></div>
<div class="defanged25-signature"><span class="font" style="font-family:arial, sans-serif, sans-serif">&nbsp;&nbsp;</span><a style="color: rgb(22, 108, 197);" defang_rel="noopener noreferrer" href="mailto:zach@waldowski.me"><span class="font" style="font-family:arial, sans-serif, sans-serif">zach@waldowski.me</span></a><br></div>
</div>
<div style="color: rgb(31, 31, 31); font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Fira Sans', 'Droid Sans', 'Helvetica Neue', Arial, sans-serif; font-size: 13px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: -0.10000000149011612px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;"><br></div>
</div>
</div>
<div style="font-family:Arial;"><br></div>
</body>
</html>