On Mon, Sep 5, 2016 at 11:13 AM, Chris Eidhof via swift-dev <swift-dev@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 <griboz...@gmail.com>*/ _______________________________________________ swift-dev mailing list swift-dev@swift.org https://lists.swift.org/mailman/listinfo/swift-dev