The biggest issue with stenciling is lack of inlining. So for example if the argument to a generic function is an array backed container, then element access will have to go through a method call that cannot be inlined.

Besides the call indirection, the compiler also loses optimization opportunities.

With the stenciling design many generic functions found in the C++ stl have to pay significant abstraction costs.

Anyway, I like the go design.

That is true. Moreover, in general the performance of generic code in Go isn't any better than interface-driven one. Generics are there in Go just for better type safety, and IMO that's sufficient already :)

It's all tradeoffs. Fully monomorphized generics tend to blow up compile time.

Full monomorphization can also greatly increase code size and icache pressure. Especially if LTO was not possible.

I haven’t seen icache pressure causing performance degradation in the wild but it is in theory possible.