On 22.03.2017 6:01, Ricardo Parada via swift-evolution wrote:
Sometimes I feel like we need a winning sigil for this, one that would look 
good, it is not already taken and easy to type in all keyboards.

Maybe we'll have to start looking at emojis :-)

IMO syntax for method references should match the same for key paths, and also that both these features desire to be highlighted by that syntax. I mean we should understand from first look at code what is happening here.

So my suggestion is to discuss if we can change syntax for method reference and apply the same syntax for key paths. Is it worth to discuss this and try to 'invent' the best syntax?

For example, '@' operator-like syntax could be proposed:

struct Thing {
        var name = ""
}

struct Bag {
        func foo() {print("foo")}
        var things = [Thing(name:"first")]
}

let ref = @Bag.foo
// probably we should require '()' here to see that this a method ref, not path
//let ref = @Bag.foo()

var bag = Bag()
ref(bag)()

let path = @Bag.things[0].name

bag@path
[email protected][0].name
[email protected][0].name
bag.things[0]@.name
bag.things[0]@Thing.name

even these IMO better that just bag[path]
bag@[path]
bag@[.things[0].name]
bag[@path]
bag[@.things[0].name]

IMO it looks and reads("bag at path") well, the syntax is very special, no confusion if we access the subscript or the key path, if you ever know about method refs or key paths - you see what is happening here. If you don't know - you will ask yourself "what does this '@' mean" and have to read docs.

Or variant with # modifier:
let ref = #Bag.foo
let path = #Bag.things[0].name
bag#path
bag#.things[0].name
bag#Bag.things[0].name

But it seems I like it less than with @.




On Mar 21, 2017, at 9:13 PM, Matthew Johnson via swift-evolution 
<[email protected]> wrote:



Sent from my iPad

On Mar 21, 2017, at 8:00 PM, Ben Rimmington <[email protected]> wrote:

Re: <https://github.com/apple/swift-evolution/pull/644>

On 21 Mar 2017, at 13:16, Matthew Johnson wrote:

I think the language is best served if all unbound members are accessible using 
the same syntax.  IMO this proposal does the right thing by choosing 
consistency with existing language features.  The current syntax for unbound 
methods works and hasn't caused any confusions I'm aware of in practice.

I don't feel too strongly about what syntax we use as long as it's concise and 
works for accessing all unbound members.  If people want to make the case for 
using `#` instead of `.` to do this I won't object but I won't be a vocal 
advocate either.  However, I think that should be an independent proposal if 
somebody wants to pursue it rather than a bike shed on this proposal which 
would only lead to inconsistency between key paths and unbound methods if it 
succeeds.

A new syntax for key paths and function references could resolve:

* the "compound name syntax for nullary functions" problem;
<https://lists.swift.org/pipermail/swift-evolution/Week-of-Mon-20170220/032890.html>

* the source-breaking change of SE-0042 (if reconsidered for Swift 4);
<https://github.com/apple/swift-evolution/blob/master/proposals/0042-flatten-method-types.md>

I would like to see both of these problems resolved.  If somebody put together 
a solid proposal for this I would probably support it (depending on details of 
course).


-- Ben


_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution
_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution

_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to