Hm. I'm not sure if the performance difference is a hard limitation because of implementation decisions, or if it would be possible to make the current implementation as fast as the closure-based implementation. I don't understand enough about the codegen (and about possible optimizations) to make that decision. Anyone who's willing to help me there?
On Thu, Sep 15, 2016 at 5:01 PM, Dave Abrahams via swift-dev < swift-dev@swift.org> wrote: > > on Tue Sep 06 2016, Chris Eidhof <swift-dev-AT-swift.org> wrote: > > > Thanks! That explains a lot. > > > > In my version, performance only is improved by 10%, so I'm not sure if > the > > tradeoff is worth it: > > > > In the isolated case of AnyIterator, there's only one method, so the > sizeof > > is the same (and the performance is worth it). In the case of > AnySequence, > > it would be a lot more work to write the implementation (and the size > would > > change a lot). Having two different mechanisms for type erasure seems > like > > it might confuse things even more. > > We'll happily take a litte more implementation complexity in exchange > for performance gains. 10% is nothing to sneeze at. > > > On Mon, Sep 5, 2016 at 9:50 PM, Dmitri Gribenko <griboz...@gmail.com> > wrote: > > > >> 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>*/ > >> > > -- > -Dave > > _______________________________________________ > swift-dev mailing list > swift-dev@swift.org > https://lists.swift.org/mailman/listinfo/swift-dev > -- Chris Eidhof
_______________________________________________ swift-dev mailing list swift-dev@swift.org https://lists.swift.org/mailman/listinfo/swift-dev