Pull request updated with just the rename. This amounted to basically saying 
"Self" will replace
"self.dynamicType" and eliminate an outlier case for a keyword using camel case.

I did not include  any discussion of generalizing protocol existentials. I can 
add in
a future directions section if you think it appropriate.

-- E


> On Apr 13, 2016, at 7:41 PM, Joe Groff via swift-evolution 
> <[email protected]> wrote:
> 
> It's been pitched before, but I don't think we've had a dedicated thread to 
> this idea. Erica has proposed making `Self` generally available within 
> methods in types to refer to the dynamic type of the current receiver. One 
> could think of `Self` as a special associated type member that exists in 
> every type for this purpose. This also happens to be what you get when ask 
> for the `dynamicType` member of a value. We could unify these concepts and 
> get rid of the clunky `dynamicType` keyword, replacing it with `x.Self`.
> 
> There's another benefit to this syntax change. Looking to the future, one of 
> the many features Doug pitched in his generics manifesto was to generalize 
> protocol existentials, lifting our current restrictions on protocols "with 
> Self or associated types" and allowing them to be used as dynamic types in 
> addition to static generic constraints. Once you do this, you often want to 
> "open" the type of the existential, so that you can refer to its Self and 
> associated types in the types of other values. I think a natural way would be 
> to let you directly use Self and associated type members of existentials as 
> types themselves, for example:
> 
>       let a: Equatable = /*...*/
>       let b: Equatable = /*...*/
> 
>       // This is not allowed, since Equatable requires two values with the 
> same static type, but
>       // a and b may have different dynamic types.
>       a == b 
> 
>       // However, we can dynamically cast one to the other's dynamic type:
>       if let bAsA = b as? a.Self {
>               return a == bAsA
>       }
> 
>       let x: RangeReplaceableCollection = /*...*/
>       let y: Collection = /*...*/
> 
>       // If y has the same dynamic Element type as x, append it to x
>       var z: x.Self = x
>       if let yAsX = y as? Any<Collection where Element == x.Element> {
>               z.append(yAsX)
>       }
> 
> `x.Self` then becomes just the first step in this direction.
> 
> -Joe
> _______________________________________________
> 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