First is the abandoning of covariance and contravariance, the property which guarantees sensible subtyping: that bytes are also integers, and integers are also objects, extending systematically to container types and functions.
-
-
Show this thread
-
Without garbage collection, offering an array of bytes where an array of integers is required requires stack-allocating an array of integers and converting each byte to an integer every time a subtype is used in place of an actual type. This is so absurd that it’s not done.
Show this thread -
So now when we want to recover performance, we need to write all containers and their operations using an increasingly elaborate set of templates or generic functions, which the compiler must specialize for each type at significant cost. This is what C++ and Rust do.
Show this thread -
Or we can create a very clunky wrapper like array_of_anything that is used wherever generic types are required, which manually casts and converts values among types dynamically each time it’s accessed. Java generics did this and they were awful.
Show this thread -
But if we have garbage collection, we can store our large data structures once with whatever type is required, then dynamically create wrappers that reinterpret it as any subtype that’s required. We pay the cost of GC and indirect control flow for accessors but that’s all.
Show this thread -
Unfortunately, most languages missed this opportunity. The C family including C# and Java are overly imperative and lost variance due to wrongly-scoped mutability. And functional languages have generally chosen type systems lacking subtypes, covariance, and contravariance.
Show this thread
End of conversation
New conversation -
-
-
I've been on the other side, using Bohems GC jacked into C malloc and IMHO it was a big design mistake to use it. We are now chained to slow performance, poor caching, random drops in perf. due to mem scans and memory retention.
-
Once the GC was put in, the pattern has spread in the sys and is now basically impossible to remove. GC is a bad crutch for devs who dont know other, better memory management options and should be avoided at all costs.
- 1 more reply
New conversation -
-
-
Managing memory in garbage collected systems is, by a long margin, the most painful experience of my career, garbage collection only works in a fictional world where the programmer doesn't have to actually care about the underlying reality of the system they're working on.
-
Yup - I must 100% concur with this. I was CTO of a 50 person game studio that almost went under because they could not ship their garbage collected game. It was one of the most painful things I've ever helped debugged. Never again.
- 2 more replies
New conversation -
Loading seems to be taking a while.
Twitter may be over capacity or experiencing a momentary hiccup. Try again or visit Twitter Status for more information.