on Wed May 25 2016, Joe Groff <jgroff-AT-apple.com> wrote:

>> On May 25, 2016, at 11:42 AM, Erica Sadun <[email protected]> wrote:
>> 
>> 
>>> On May 25, 2016, at 12:26 PM, Dave Abrahams via swift-evolution 
>>> <[email protected]> wrote:
>>> I don't understand why the proposal says we can't implement this in the
>
>>> library today.  
>>> 
>>> $ swift
>>> Welcome to Apple Swift version 2.2 (swiftlang-703.0.18.8 clang-703.0.30). 
>>> Type :help for assistance.
>>>   1> func dynamicType_<T>(_ x: T) -> T.Type { return x.dynamicType }
>>>   2> dynamicType_(42)
>>> $R0: Int.Type = Int
>>>   3> class B {}
>>>   4. class C : B {}
>>>   5. dynamicType_(C() as B)
>>> $R1: B.Type = __lldb_expr_5.C
>>>   6>
>
> Now try it with a protocol type, or Any:
>
> (swift) var x: Any = 1738
> // x : Any = 1738
> (swift) dynamicType_(x)
> // r0 : Any.Protocol = protocol<>
>
> `dynamicType` is really two operations: For normal concrete types, it
> produces concrete metatypes, and for existentials, it produces
> existential metatypes. There's no way to express the latter for an
> arbitrary unknown protocol type in the language today.

Can't we detect in the runtime library that we've got an existential and
do the right thing?

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

Reply via email to