Consider how generics can be implemented in a compiled language:
a) specialize them at compile time - this means any library with generics in its API has to be distributed as source, and compiled *with or after* the code that uses it
b) erase them at compile time - they're just static checks, the type parameters can't affect behaviour, and everything becomes void* - no u64, vectors, or pass-by-value structs
c) specialize them at link time - now you need a new ABI and object format...
1/