| > special case where all memory can be easily handled in arenas
That seems to be an unfair bar to set. If _most_ objects are easily allocated by an arena, then that still removes most of the need for GC. I like Jai's thesis that there's four types of memory allocations, from most common to least common: 1. Extremely short lived. Can be allocated on the function stack. 2. Short lived + well-defined lifetime (per frame/request). Can be allocated in a memory arena. 3. Long lived + well-defined owner. Can be managed by a subsystem-specific pool. 4. Long lived + unclear owner. Needs a dynamic memory management approach. If you want to make the claim that tracing GCs surpass manual memory management in general, you should compare to a system written with this in mind, not one that calls malloc/free all over the place. I guess it might be more fair if you compare tracing GC with modern c++/rust practices. I agree that for most systems, it's probably much more _practical_ to rely on tracing GC, but that's a very different statement. |
Now, I know very little about Jai, but bear in mind that its author doesn't have much experience at all with servers or with concurrent software in general, which is 1. where objects with uncertain lifetimes are common enough to be a serious problem, and 2. a huge portion of software being written these days. Games are a domain where it's unusually common for nearly all objects to have very clear, "statically analyzable" lifetimes.