2 ms·
By your definition of what is "engineering" I feel like all improvements or changes are just engineering. Because you've described three classes: * No explici
by olliej 4y ago
By your definition of what is "engineering" I feel like all improvements or changes are just engineering.
Because you've described three classes:
* No explicit runtime knowledge of whether a given object is alive
* Explicitly tracking how many references there are to an object
* Searching the program memory to see if there are references to an object that make it live
I'm not sure there is another class of memory management that isn't one of these three?
It's also somewhat unfair to rust - the static and parametric lifetime management _is_ new, and doesn't "need unsafe" to do anything interesting; and to tracing GCs modern GCs have developed ever more techniques to not be "stop the world" including parallel, iterative, lock free tracing, etc.
- tomp 4y agoAll of the ones you mentioned above still involve a stop-the-world phase, however brief. The keywords you’re looking for are “fullya-concurrent” or “on-the-fly” GC, but I’m not aware of any production runtime with those.
- WJW 4y agoDoesn't the JVM ecosystem have fully concurrent GC with the Azul C4 collector? It's not my favorite set of languages but I don't think we can realistically claim the JVM is not a production-ready runtime.
- tomp 4y agoYes, "pauseless" is another keyword I forgot to mention. Azul uses a read barrier which I guess makes it so slow that noone uses it (and the same ideas haven't made their way into JDK collectors). The previous version required hardware-supported read barrier, now AFAIK they only require a Linux kernel extension.