Well, I believe I understand now what *you mean* under #Self. OK. Thank you for clarifications. In my terminology 'this' could be called BaseSelf. Your "thing" just can not be called #Self. IMO in initial proposal #Self means not more than placeholder for the concrete type name(inside type declaration or inside protocol).

You propose just something different, more advanced than initial #Self, you propose not some static "thing" but extended behavior if #Self is a return type of protocol requirement.

I strictly against to couple the initial proposal of #Self and your proposal for extended features (for protocol conformance of `->#Self`). Please be clear and obvious regarding the name of that feature. I really think the behavior you propose can not be called #Self(or Type)

What I suggest: de-couple these proposals to:

a) initial proposal of #Self as placeholder for concrete type name. Choose the name for it. Probably StaticSelf, or Type, or somehting else

b) your proposal for BaseSelf feature. I'll definitely support it with just name changed to clearly reflect its propose.

On 11.05.2016 18:58, Matthew Johnson wrote:
'f' would return E for E, F and G.  Because the conformance is declared
by E the requirement to return #Self is fixed as an invariant
requirement to return E for all potential subclasses.


Probably you(we) need another proposal, like BaseSelf (or SuperSelf)
that means "this class or any its base class", then I understand how
such a `f()->BaseSelf` protocol requirement can be applied to E
class and also be true for F&G classes (as f() inherited from base
class will return instance of E which is base for both).
This is exactly what #Self (or Type) does.  The behavior you have been
describing is the behavior of Self which already exists.

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

Reply via email to