> On Jul 2, 2017, at 10:15 PM, Christopher Kornher <[email protected]> wrote:
> 
> A full-fledged introspection system should provide this information, which I 
> suppose could be useful for creating proxies through code generation or 
> dynamic Objective-C like features, should they ever be added to the language. 
> Would that be sufficient for your needs? It is not clear to me what problem 
> you are trying to solve.
> 
> Hopefully I won't stir up too much trouble by saying that this kind of 
> capability is very useful in Objective-C for mocking, for example.

I have the proposal for my use case out now at 
<https://gist.github.com/CTMacUser/c493f775075e946efdcfd85d38473291 
<https://gist.github.com/CTMacUser/c493f775075e946efdcfd85d38473291>>.

Look at:

alter MyInt16: Int16, Hashable {
publish Equatable
var hashValue: Int {
return 2000 &+ super.hashValue
}
}

If I wanted to copy Int16 completely, I couldn’t write the full protocol list 
because it’s open-ended from the user’s perspective due to extensions. However, 
the list is closed from the compiler/linker’s perspective, so we can synthesize 
an all-protocol list:

alter MyInt16: Int16, #protocols(Int16), ANewProtocol {
publish #protocols(Int16)
// Define new members here, some of which implement ANewProtocol....
}

Besides this, maybe we could do some analysis using 
#protocols(MyType).Protocol. (Oh, completely copying Int16 is still useful 
because functions with them are considered separate overloads, unlike a 
type-alias.)

I’m not sure what you mean by a full-fledged introspection system, but my 
current use for it requires a solution that is 100% workable at compile-time.

— 
Daryle Walker
Mac, Internet, and Video Game Junkie
darylew AT mac DOT com 

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

Reply via email to