Go is the most instructive answer in this section because it is the one that was argued about in public for twelve years before it shipped. The refusal was never hostility to the feature. It was a cost argument: the team held that every known implementation made either the programmer, the compiler, or the runtime pay too much, and declined to pick until it found a bargain it liked. What arrived in 1.18 is neither erasure nor full monomorphization. The compiler emits one copy per garbage-collection shape and passes a dictionary for the rest, which quantizes types by properties the allocator already tracks.

That middle path is the reason this folder sits between Java erasure and CLR specialization in the comparison at Generics, Monomorphization vs Erasure. Theory stays in Programming Language Concepts.

The refusal, and the design that ended it

How it compiles

The middle path, priced.

The deliberate omissions

The interesting half of the proposal is the list of things it refused to add.

Interfaces, which came first

Go had an answer to polymorphism for twelve years before it had type parameters, and it is a different answer.

Concurrency and the runtime

The rest of the language

Read from the comparative layer


Any pages placed under this folder are auto-listed below by Quartz.