You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Registers only non-local generated classes in the callback by extracting
information about its names and using the names to generate class file paths.
Mimics the previous logic that was present in `Analyzer`, despite the fact
that now we construct the names that the compiler will give to every non-local
class independently of genbcode.
Why do we do this? The motivation is that we want to run the incremental algorithm
independently of the compiler pipeline. This independence enables us to:
1. Offload the incremental compiler logic out of the primary pipeline and
run the incremental phases concurrently.
2. Know before the compilation is completed whether another compilation will or
will not be required. This is important to make incremental compilation work
with pipelining and enables further optimizations; for example, we can start
subsequent incremental compilations before (!) the initial compilation is done.
This can buy us ~30-40% faster incremental compiler iterations.
This method only takes care of non-local classes because local clsases have no
relevance in the correctness of the algorithm and can be registered after genbcode.
Local classes are only used to contruct the relations of products and to produce
the list of generated files + stamps, but names referring to local classes **never**
show up in the name hashes of classes' APIs, hence never considered for name hashing.
As local class files are owned by other classes that change whenever they change,
we could most likely live without adding their class files to the products relation
and registering their stamps. However, to be on the safe side, we will continue to
register the local products in `Analyzer`.
0 commit comments