▲ | gf000 3 days ago | |||||||
I haven't followed swift too closely, but ref counting is not a good fit for typical server applications. Sure, value types and such take off a lot of load from the GC (yes, ref counting is a GC), but still, tracing GCs have much better performance on server workloads. (Reference counting when an object is shared between multiple cores require atomic increments/decrements and that is very expensive). | ||||||||
▲ | zozbot234 3 days ago | parent | next [-] | |||||||
> but still, tracing GCs have much better performance on server workloads Good performance with traditional tracing GC's involves a lot of memory overhead. Golang improves on this quite a bit with its concurrent GC, and maybe Java will achieve similarly in the future with ZGC, but reference counting has very little memory overhead in most cases. > Reference counting when an object is shared between multiple cores require atomic increments/decrements and that is very expensive Reference counting with a language like Rust only requires atomic inc/dec when independently "owning" references (i.e. references that can keep the object around and extend its lifecycle) are added or removed, which should be a rare operation. It's not really performing an atomic op on every access. | ||||||||
| ||||||||
▲ | jiehong 3 days ago | parent | prev [-] | |||||||
Tracing GC and their pauses on server workload is another tradeoff. They all have a tradeoff. You make a fair point. | ||||||||
|