www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 24336] New: Downcast to interfaces

https://issues.dlang.org/show_bug.cgi?id=24336

          Issue ID: 24336
           Summary: Downcast to interfaces
           Product: D
           Version: D2
          Hardware: All
                OS: All
            Status: NEW
          Severity: enhancement
          Priority: P1
         Component: dmd
          Assignee: nobody puremagic.com
          Reporter: bugzilla digitalmars.com

deadalnix writes:

This is getting a bit more tricky, so I won't expand this one fully, but it is
also possible to do much better on this front as well. The obvious complication
that that interfaces allow for multiple inheritance.

The first obvious optimization is to consider the chain of leftmost (or
alternatively the longest chain, which allows to cull more candidates faster)
inheritance the primaries for the interface and eliminate the whole branch at
once using the same strategy as 3/.

Now we are left with possible secondaries match. Here, no possibility to remain
O(1), we'll have to loop over the other interfaces and repeat the matching
process. Thankfully very branch hierarchy are uncommon in practice, but even
then, we can use this one weird trick to dramatically cull out the search
space: bloom filters.

Make the bloom filter 64 bits and simply cull via (targetBloom &
aggregateBloom) == targetBloom and you can eliminate a good chunk of the search
right there.

https://forum.dlang.org/post/hteuczyclxajakrisxjd forum.dlang.org

--
Jan 11