(It's a shame that people think there are political issues around Go
generics. I don't think there are.)
I agree that with any cross-package fully-compiled generics
implementation we would store the body of generic functions and types
in the export data. That still leads us in the direction either of
excess compilation, because the same generic function is compiled
multiple times and duplicates discarded at link time, or of even
slower links, because we compile the generic functions at link time.
These are not show stoppers. It's also worth considering that other
approaches are possible. For example, we could compile generic
functions once into code that uses the reflect package. That gives us
faster builds at the cost of slower run-time performance.
To answer your question, I believe that the gc compiler always build
interface method resolution tables at run-time. The gccgo compiler
builds them at compile time when possible, at run-time when not. In
general it is impossible to know which interface method tables will be
needed at compile time.
Ian