Regarding C# it depends on which compiler you talk about.
Microsoft's current JIT/NGEN, generate a single version for reference types and a separate version for each value type. So a mix of Java/C++ approaches.
Not sure what the new JIT/NGEN compilers, RyuJIT will use.
I also don't know what approaches are taken by Mono, Bartok and IL2CPU, but they might be similar.
Yep, now I can see why this is trilema is "incomplete at best" - c# and other use what can be described as a mixture of these three approaches.
I was going to say that the c# compiler is fast enough despite this, but then I remembered that one of go's selling points is that the go compiler is blindingly fast compared to languages such as c#. Perhaps maintaining that performance with generics is a real issue.
I believe C# does it at runtime for reference types, and compile time for value types, so that you don't eat the cost of boxing at runtime. It doesn't make sense to make separate compile time generic types for reference types in C# since the type is basically constrained to using system.object members anyway (unless you add type constraints to the generic type class definition).
Could someone give a brief introduction to what this sentence means? I have absolutely no idea about any of it.