`some Shape` is literally identical to `impl Shape`, including the semantics you discuss above. The compile-time return value of a function returning `some Shape` must be the same on all execution paths. It just avoids expressing to the caller what it is.
Incidentally, this in principle allows the optimiser to specialise the caller to the return type of this function, avoiding the existential altogether.
I believe that's incorrect. Swift generics deal with statically-knowable types.
My reading was:
`some` -> Some specific type with these constraints which will be known at compile time
`any` -> Any value conforming to these constraints which may vary at runtime
Re:Swift Generics Evolution
by slavapestov on Monday April 15, 2019 @09:16AM
(#19665043)
In the current “opaque types” prototype implementation `some` still hides the implementation of the type across module boundaries, meaning it can be changed without recompiling clients. The specific guarantee is that (in a single process execution) each invocation of a some-returning function returns the same concrete type.
I may have misunderstood what is planned for Swift though.