[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