[swift-evolution] [Pre-proposal/Idea] Auto-generate Type-Erased Wrappers

Russ Bishop xenadu at gmail.com
Mon Apr 4 18:37:43 CDT 2016


> On Apr 4, 2016, at 3:07 PM, Haravikk via swift-evolution <swift-evolution at swift.org> wrote:
> 
> One of the things that threw me when starting with Swift was the inability to use many protocols as types, e.g- being unable to declare: [SequenceType], instead having to do: [AnySequence]
> 
> And I guess it got me wondering; why can’t we just have these be auto-generated and used where we would expect a protocol to fit? Writing type-erased wrappers currently involves a lot of boilerplate, especially for a type with a lot of methods and/or properties, so automating this would be very useful.
> 
> For me there are two good options:
> 
> Autogenerate for All Types: As it says; every protocol would have an identically named type-erasure (with the same visibility etc.) that Swift would just swap in where appropriate. For example:
> 
> 	protocol Foo { … }
> 	let myArray:[Foo]	// Array of type-erased wrappers of Foo

The only reason you can’t use [Foo] is due to associated type or Self requirements so what type is Foo’s associated type(s) here? 


> 
> 
> I’m particularly curious about other features in discussion or that are upcoming that may affect this, as I’m sure I’ll have missed some. Anything that might render this obsolete (or less necessary)? Also whether anyone thinks it could be a bad idea to essentially hide the type-erasure.
> 

The Completing Generics manifesto discusses this in the context of Existential types. If that were supported, then the compiler would just treat the associated types as Any. It also discusses allowing you to create types ala protocol<SequenceType where Element == String>


Russ

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


More information about the swift-evolution mailing list