Smart pointers instead of GC?
Shammah Chancellor
anonymous at coward.com
Tue Feb 4 04:09:09 PST 2014
On 2014-02-03 23:00:22 +0000, woh said:
>
> On Monday, 3 February 2014 at 21:42:59 UTC, Shammah Chancellor wrote:
>> On 2014-02-01 07:35:44 +0000, Manu said:
>>
>>> On 1 February 2014 16:26, Adam Wilson <flyboynw at gmail.com> wrote:
>>> On Fri, 31 Jan 2014 21:29:04 -0800, Manu <turkeyman at gmail.com> wrote:
>>>
>>> On 26 December 2012 00:48, Sven Over <dlang at svenover.de> wrote:
>>>
>>> std.typecons.RefCounted!T
>>>
>>> core.memory.GC.disable();
>>>
>>>
>>> Wow. That was easy.
>>>
>>> I see, D's claim of being a multi-paradigm language is not false.
>>>
>>>
>>> It's not a realistic suggestion. Everything you want to link uses the GC,
>>> and the language its self also uses the GC. Unless you write software in
>>> complete isolation and forego many valuable features, it's not a solution.
>>>
>>>
>>> Phobos does rely on the GC to some extent. Most algorithms and ranges do
>>> not though.
>>>
>>>
>>> Running (library) code that was written with GC in mind and turning GC off
>>> doesn't sound ideal.
>>>
>>> But maybe this allows me to familiarise myself more with D. Who knows,
>>> maybe I can learn to stop worrying and love garbage collection.
>>>
>>> Thanks for your help!
>>>
>>>
>>> I've been trying to learn to love the GC for as long as I've been around
>>> here. I really wanted to break that mental barrier, but it hasn't happened.
>>> In fact, I am more than ever convinced that the GC won't do. My current #1
>>> wishlist item for D is the ability to use a reference counted collector in
>>> place of the built-in GC.
>>> You're not alone :)
>>>
>>> I write realtime and memory-constrained software (console games), and for
>>> me, I think the biggest issue that can never be solved is the
>>> non-deterministic nature of the collect cycles, and the unknowable memory
>>> footprint of the application. You can't make any guarantees or predictions
>>> about the GC, which is fundamentally incompatible with realtime software.
>>> Language-level ARC would probably do quite nicely for the miscellaneous
>>> allocations. Obviously, bulk allocations are still usually best handled in
>>> a context sensitive manner; ie, regions/pools/freelists/whatever, but the
>>> convenience of the GC paradigm does offer some interesting and massively
>>> time-saving features to D.
>>> Everyone will always refer you to RefCounted, which mangles your types and
>>> pollutes your code, but aside from that, for ARC to be useful, it needs to
>>> be supported at the language-level, such that the language/optimiser is
>>> able to optimise out redundant incref/decref calls, and also that it is
>>> compatible with immutable (you can't manage a refcount if the object is
>>> immutable).
>>>
>>> The problem isn't GC's per se. But D's horribly naive implementation,
>>> games are written on GC languages now all the time (Unity/.NET). And
>>> let's be honest, games are kind of a speciality, games do things most
>>> programs will never do.
>>>
>>> You might want to read the GC Handbook. GC's aren't bad, but most, like
>>> the D GC, are just to simplistic for common usage today.
>>>
>>> Maybe a sufficiently advanced GC could address the performance
>>> non-determinism to an acceptable level, but you're still left with the
>>> memory non-determinism, and the conundrum that when your heap
>>> approaches full (which is _always_ on a games console), the GC has to
>>> work harder and harder, and more often to try and keep the tiny little
>>> bit of overhead available.
>>> A GC heap by nature expects you to have lots of memory, and also lots
>>> of FREE memory.
>>>
>>> No serious console game I'm aware of has ever been written in a
>>> language with a GC. Casual games, or games that don't attempt to raise
>>> the bar may get away with it, but that's not the industry I work in.
>>
>> You can always force the GC to run between cycles in your game, and
>> turn off automatic sweeps. This is how most games operate nowadays.
>> It's also probably possible to create a drop-in replacement for the GC
>> to do something else. I could see if being *VERY* useful to make the
>> GC take a compile-time parameter to select which GC engine is used.
> ur right I never thought of that, I bet all them game devs never
> thought of it either, they so dumb. I bet they never tried to use a
> GC, what fools! Endless graphs of traced objects, oh yes oh yes! It
> only runs when I allocate, oh what a fool I've been, please castigate
> me harder!
>
> Adam pls tell me more of this c# and that amazing gc it sounds so good
First of all, bottom quoting is evil. Second of all, your response is
immature. Thirdly, I am not adam. And fourthly, I specifically
mention that many games are currently using garbage collection.
-S.
More information about the Digitalmars-d
mailing list