GC, the simple solution
Dave
Dave_member at pathlink.com
Fri Jun 9 12:40:22 PDT 2006
John Reimer wrote:
> David Gileadi wrote:
>> Walter Bright wrote:
>>> Jeff Parsons wrote:
>>>> My _only_ significant beef with D so far as been the unbound time
>>>> for a garbage collection; therefore, if an incremental garbage
>>>> collector built into D could guarantee me a set maximum time would
>>>> be taken for each garbage collection (which I would manually induce
>>>> as often as possible) then unless the efficiency hit is TERRIBLE I
>>>> would be all over it.
>>>
>>> If you're looking for a *guarantee*, then you cannot even use
>>> malloc(). Malloc has unbounded time, and is not predictable.
>>
>> It seems that a fairly common desire is to use D for writing games.
>> Games don't typically have hard real-time requirements, but it also
>> doesn't look good if your screen freezes for a second or two in the
>> middle of play.
>>
>> This is an area where an incremental collector or some kind of
>> reference counting solution would be handy, since (especially in large
>> programs) it would be difficult to avoid using garbage collected
>> code. I realize that the programmer has the responsibility to manage
>> memory intelligently, but it would be nice to not avoid using GC code
>> entirely. As others have stated, it would even be worth giving up
>> some overall performance to gain a smooth playing experience.
>
>
> Didn't Walter point out that that, in the current gc implementation, you
> just have to be conscientious about when you call 'new' (which appears
> to initiate a collect) if you want to avoid the gc initiated pauses.
>
Yea, in the current GC, allocation is the only thing that may implicitly
initiate a collection.
> So in game programming, I assume it's just a matter of good organization
> and planning. You make sure you allocate sufficient memory ahead of
> time and avoid using 'new' in any location that would cause an ugly
> pause in the game. Furthermore, you might choose appropriate times for
> when you want to call a full collect manually.
>
And D's easy array slicing along with array operations (like
re-initializing an array with 'arr[] = 0;') makes the code to use
pre-allocated buffers a lot easier to write too.
> As I see it, the obligation for careful design doesn't disappear when a
> gc is in place. It certainly makes life easier in many ways. But one
> still has to be aware of the gc shortcomings and adapt to the situation.
> I still see it as a tremendous improvement over having to clean up
> after every memory allocation you make (C/C++).
>
> In short, using a gc doesn't mean you don't have to do your homework. :)
>
> -JJR
More information about the Digitalmars-d
mailing list