[swift-dev] Implementation of Type Erasers

Dmitri Gribenko gribozavr at gmail.com
Mon Sep 5 14:50:16 CDT 2016


On Mon, Sep 5, 2016 at 11:13 AM, Chris Eidhof via swift-dev
<swift-dev at swift.org> wrote:
> Hello swift-dev,
>
> I was wondering why type erasers (e.g. for AnyIterator) are implemented the
> way they are. I would implement AnyIterator like this:
>
> final class MyAnyIterator<A>: IteratorProtocol {
>     var nextImpl: () -> A?
>
>     init<I: IteratorProtocol>(iterator: I) where I.Element == A {
>         var copy = iterator
>         nextImpl = { copy.next() }
>     }
>
>     func next() -> A? {
>         return nextImpl()
>     }
> }
>
> Instead, it is implemented in a class which contains a box.

Your approach requires adding a new closure property for every method
that is forwarded.  Subclassing does not require that.

If you see a case where performance is not good, we would appreciate a
bugreport at https://bugs.swift.org/ .  Please attach a self-contained
reproducer.  Thank you.

Dmitri

-- 
main(i,j){for(i=2;;i++){for(j=2;j<i;j++){if(!(i%j)){j=0;break;}}if
(j){printf("%d\n",i);}}} /*Dmitri Gribenko <gribozavr at gmail.com>*/


More information about the swift-dev mailing list