| ▲ | jaen 3 hours ago | |||||||||||||||||||||||||
Could you actually explain/exemplify any of the gotchas and what's been made better (or is this just handwaving)? | ||||||||||||||||||||||||||
| ▲ | cogman10 an hour ago | parent | next [-] | |||||||||||||||||||||||||
Part of the reason Java hasn't reified generics is because C# did and it was a real big headache that also limited non-C# languages on the C# runtime (CLI?). Everything had to be recompiled to work with newer C# runtimes. While it's pretty easy to run a bunch of language on the JVM (Javascript, python, ruby, clojure) doing the same for C# is somewhat a nightmare, particularly for non-type aware languages. For example, Imagine you have an api like `void do(List<Foo> foos)`. In the erasure environment of the JVM that looks like `void do(List foos)`. From python it's pretty easy to call with a `foos = [Foo()]`. But not so much if your python implementation needs to figure out how and if it can coarse it's `List` type into a `List<Foo>` type. | ||||||||||||||||||||||||||
| ||||||||||||||||||||||||||
| ▲ | kuhsaft 2 hours ago | parent | prev | next [-] | |||||||||||||||||||||||||
The gotcha is the potential boxing of structs onto the heap, but that can be avoided using `ref struct`s. | ||||||||||||||||||||||||||
| ▲ | bbg2401 2 hours ago | parent | prev [-] | |||||||||||||||||||||||||
Why would you presume the parent is "just handwaving"? It's odd how people in the .NET community struggle to earnestly engage in conversation with Java folk. The reverse isn't true. | ||||||||||||||||||||||||||