Hi Chris,

Some questions:

1️⃣ How does the subscript approach work for dynamically passing in multiple 
parameters? For example, what would “dog.addTrick(“Roll Over”, favorite: true)” 
be when expressed as a subscript method? The subscript syntax only really seems 
to suit property-style invocations, unless I’m missing something obvious.

2️⃣ It seems like “dog.add_trick(…)” would have a dynamic lookup name of 
“add_trick”. What would the lookup name of “dog.add(trick: …)” be? Or in other 
words, how do named parameters affect the lookup name?

3️⃣ Can I implement the subscript method multiple times, or is only a single 
implementation allowed? For example, in the JSON example, there’s currently 
only a dynamic member subscript implementation that returns “JSON?”. Could I 
add another one that returns “String?” and have the type checker choose the 
appropriate one based on type inference?

As far as naming goes, I’d propose “DynamicMemberForwarding”. In my mind, 
“Lookup” and “Resolve” are inappropriate, because you’re not actually “looking 
up” or “resolving” to a particular implementation. In Objective-C, the 
“+resolveInstanceMethod” stuff expects you to *provide* a method implementation 
(an IMP). On the other hand, if there isn’t a method implementation (which is 
the case here), you end up in the “-forwardInvocation:” path, where you can 
just introspect the NSInvocation and do whatever it is you’re doing to do. So, 
it seems like this proposal sounds a lot more like ObjC's “invocation 
forwarding” rather than the method resolution; hence my preference for using 
“Forwarding” in the name for naming consistency.

Dave

> On Nov 26, 2017, at 11:04 PM, Chris Lattner via swift-evolution 
> <swift-evolution@swift.org> wrote:
> 
> I’d like to formally propose the inclusion of user-defined dynamic member 
> lookup types.
> 
> Here is my latest draft of the proposal:
> https://gist.github.com/lattner/b016e1cf86c43732c8d82f90e5ae5438
> https://github.com/apple/swift-evolution/pull/768
> 
> An implementation of this design is available here:
> https://github.com/apple/swift/pull/13076
> 
> The implementation is straight-forward and (IMO) non-invasive in the compiler.
> 
> -Chris
> 
> _______________________________________________
> swift-evolution mailing list
> swift-evolution@swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution

_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to