[swift-evolution] [Pitch] Rename `x.dynamicType` to `x.Self`

Taras Zakharko taras.zakharko at uzh.ch
Thu Apr 14 16:12:36 CDT 2016

I do not think that I was conflating these two aspects. Using #type(self) would return the particular type of the current instance (dynamic type) while using #type(A.var) would return the declared (static) type of the property. Now, 

  let a = A()

would again return the actual (dynamic) type of var

In essence, I don’t see why we need to separate the mechanisms for querying these types when the distinction can be made on the grounds whether we are querying the type of a particular value/instance or a particular (not instantiated) declaration. 

— Taras

P.S. Does Swift today even have the means of querying the static type of a variable once it has been instantiated, i.e. can I programmatically  find out that  x has been declared as P in this scope:

let x : P = TypeThatConformsToP()

If you really want to differentiate between these two then we’d need two separate mechanisms, e.g. #statictype(), #dynamictype(), with #dynamictype() referring to the  instantiated value and $statictype() referring to the variable declaration.

> On 14 Apr 2016, at 22:59, Joe Groff <jgroff at apple.com> wrote:
>> On Apr 14, 2016, at 1:11 PM, Taras Zakharko <taras.zakharko at uzh.ch> wrote:
>> I do not understand why we can’t do
>> type(self)
>> or even
>> #type(self)
>> Personally, I find .Self business to be quite confusing and idiosyncratic. Having a generic #type() directive would be a general improvement for the language design and it would also open up future possibilities such as
>> extension A where A.B == #type(A.C.property1) {
>> }
>> and other potentially useful things. 
> Swift's type system has static and dynamic manifestations, and you're conflating them here. #type in a situation like `where A.B == #type(A.C.property1)` would have to produce the static type of property, whereas `x.dynamicType` today produces the dynamic type of a class or existential.
> -Joe

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20160414/08772c05/attachment.html>

More information about the swift-evolution mailing list