Re:Crystal: Fast as C, Slick as Ruby
by quotemstr on Thursday August 04, 2016 @12:26PM
(#12226633)
Reference counting also has an unbounded worst case: what if you drop the last reference to a very large graph of objects? Then you free the whole thing, which can take an arbitrarily large amount of time.
[ Parent
| on HN ]
The main difference there is: You can control the timing of when to pay that penalty. With a full blown GC, if you run into performance issues because of it, you basically have to rearchtect the whole app (with something like memory pools, which you pay by needing more RAM than strictly necessary and with a vastly more complex code). With ARC I can track down a slow memory operation to a single line of code and deal with it there (e.g. by moving the complex object into a singleton). IMO a full GC is just the wrong level of abstraction for anything that's timing relevant, which includes all UI threads.
> IMO a full GC is just the wrong level of abstraction for anything that's timing relevant, which includes all UI threads.
Hard real-time GC systems exist. In these systems, you can prove that pauses last no longer than a certain number of milliseconds. They're definitely applicable to programs with UI.
Can you prove that dropping a reference doesn't free an arbitrarily large number of objects? You can probably convince yourself in specific cases for specific programs that you don't see arbitrarily large refcount-release times, but any change you make to the code might invalidate this analysis.
A hard real-time GC stays hard real time.
I keep hearing about these, but which of the popular GC languages (read: lots of library support) have real time GC? Aren't we talking about industrial RT applications rather than GUIs?
Re:Crystal: Fast as C, Slick as Ruby
by SamReidHughes on Thursday August 04, 2016 @04:10PM
(#12228103)
You don't have to free the whole thing right away, you (the implementation) can free O(1) things and put the rest on a list to process later.