> On 30 Mar 2017, at 17:18, Joe Groff <[email protected]> wrote:
> 
> 
>> On Mar 30, 2017, at 6:54 AM, Haravikk via swift-evolution 
>> <[email protected]> wrote:
>> 
>> 
>>> On 30 Mar 2017, at 14:12, Matthew Johnson via swift-evolution 
>>> <[email protected]> wrote:
>>>> On 30 Mar 2017, at 01:13, Michael J LeHew Jr via swift-evolution 
>>>> <[email protected]> wrote:
>>>> I'm not a fan of the new syntax for creating key paths. To me, it feels 
>>>> like they've been demoted to second class citizens of the language simply 
>>>> because of how more verbose it now is. The new syntax is also too 
>>>> confusingly similar to string key paths: I had to look closely at the code 
>>>> to see the difference. Is there no symbol we can use to make it ambiguous? 
>>>> Ideas:
>>>> 
>>>> Person::friend.lastName
>>>> Person/friend.lastName
>>>> Person#friend.lastName
>>>> 
>>>> I'm a fan of the first one as it has similarities to names pacing in C++.
>>> 
>>> I'm a big fan of the last one.  I argued for it earlier as the best syntax 
>>> to use if we deviated from the initial proposal.  I like it for several 
>>> reasons:
>>> 
>>> - # suggests compiler magic is at work which is the case here.
>>> - #friend.lastName works nicely as a shorthand in contexts expecting a key 
>>> path with a fixed Root
>>> - # would work for unbound methods solving the no arguments case.  IMO all 
>>> unbound members should be accessed using the same syntax.
>>> - # enables the possibility of mixing property access and method calls in 
>>> the path as a future enhancement
>>> 
>>> The arguments supporting this approach are pretty strong to me.  I agree 
>>> with David that the #keyPath syntax makes it feel more like a second class 
>>> citizen, not just because of the verbosity but also because it is directly 
>>> borrowed from an Objective-C interop feature.  This is a very powerful 
>>> feature that deserves to be a first class syntactic citizen every bit as 
>>> much as unbound methods do.
>> 
>> Personally I'd prefer the use of a leading dollar sign for this, for example:
>> 
>>      $Person.friend.lastName
>> 
>> I find a symbol midway through the path a bit strange, plus the leading 
>> dollar sign already implies compiler magic in the same way as anonymous 
>> parameters in closures. In fact you can think of anonymous parameters as a 
>> kind of special key-path of sorts, and there should be no ambiguity.
>> 
>> I prefer this to the hash symbol for compiler directives, since those feel 
>> more like things that are done once during compilation, rather than 
>> something you actually use at run-time, so I like the distinction of another 
>> symbol for that.
> 
> $ is reserved for the debugger. We don't really have many free symbols to 
> burn, and it would be unwise to burn one on a new feature before having 
> evidence that it deserves it.

Is it actually in-use or just reserved? Not sure I've ever needed it in the 
debugger.
What about @? It has a certain appropriateness in how it reads for a path like: 
@Person.friend.lastName

Another alternative might be something like an unnamed compiler directive, for 
example: #(Person.friend.lastName)
If you consider the statement to mean "expand this".
_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to