Destructor semantics
Steven Schveighoffer
schveiguy at yahoo.com
Thu Aug 12 12:18:33 PDT 2010
On Thu, 12 Aug 2010 13:05:53 -0400, Joe Greer <jgreer at doubletake.com>
wrote:
> "Steven Schveighoffer" <schveiguy at yahoo.com> wrote in
> news:op.vhbtwjhoeav7ka at localhost.localdomain:
>
>>> Logically speaking if an object isn't destructed, then it lives
>>> forever and if it continues to hold it's resource, then we have a
>>> programming error. The GC is for reclaiming memory, not files. It
>>> can take a long time for a GC to reclaim an object and you surely
>>> don't want a file locked for that long anymore than you want it held
>>> open forever. My point is, that it is a programming error to expect
>>> the GC be involved in reclaiming anything but memory. IMO, the best
>>> use of a finalizer is to error out if an object holding a resource
>>> hasn't been destructed, because there is obviously a programming
>>> error here and something has leaked. GCs aren't there to support
>>> sloppy programming. They are there to make your life easier and
>>> safer.
>>
>> An open file maybe, but why should the compiler decide the severity of
>> not closing the resource? What if the resource is just some
>> C-malloc'd memory?
>>
>> Note, you are free to write your finalizer to do exactly what you want
>> (print some error if it's called and the file's still open). I just
>> don't think the compiler should be involved in the decision, because
>> it's too ill-equipped to make one.
>>
>> -Steve
>
> I think you misunderstand what I was saying. The compiler doesn't decide
> any of that. The programmer conserned with correctness has the option of
> making his finalizer complain about unfreed resources. I language
> shouldn't be your nanny, but it should encourage and enable you to do the
> right thing. There is just no substitute for knowing how to program.
So you mark a struct something like:
@noheap struct File
{...}
That's a possible solution. I just don't like the blanket assumptions
being made.
-Steve
More information about the Digitalmars-d
mailing list