www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 8139] New: Make objects really disposable by addition of "Object finalized" assertion

reply d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=8139

           Summary: Make objects really disposable by addition of "Object
                    finalized" assertion
           Product: D
           Version: D2
          Platform: All
        OS/Version: All
            Status: NEW
          Keywords: contracts, diagnostic
          Severity: enhancement
          Priority: P2
         Component: DMD
        AssignedTo: nobody puremagic.com
        ReportedBy: verylonglogin.reg gmail.com



14:39:44 MSD ---
Original NG thread:
True disposable objects (add "Finalized!" assertion)
http://forum.dlang.org/thread/jo0p3a$aue$1 digitalmars.com

First message from NG thread:
This idea is too obvious and I suppose I'm the only one not knowing it, 
but I have never seen it's implementation. Why?

The idea:
1. `Object` class has hidden `isAlive` field which is true since 
construction and up to finalization.
2. Every method asserts that the object is alive first.
3. There is an `finalize` function that just rt_finalize an object in 
debug mode but can even free memory in release mode.

Isn't it no-brainer? Isn't it the only way to debug manual memory 
management and shared resources without error-prone boilerplate?


manually check the object isn't disposed every time I use it or in every 
it's method to find where I'm doing something with a disposed object by 
a mistake.


IMHO finding using of dead references is almost as major as not allowing 
to free memory of alive objects (I mean GC), but GC is often implemented 
and dead references detection isn't.

Strongly require your thoughts.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
May 24 2012
next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=8139


Alex Rønne Petersen <alex lycus.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |alex lycus.org



CEST ---
The idea in and of itself is not bad. In fact, it would make debugging
wonderfully easy. My only concern is this: Object size. We already store two
words of memory in *every single object header*. This means 8 bytes on 32-bit
and 16 bytes on 64-bit.

Now suppose we added an extra bool field to Object. Not only would the compiler
have to be changed to align fields correctly, but it would also result in
objects eating 12 bytes on 32-bit and 24 bytes on 64-bit (simply because the GC
only power of two allocations or something along those lines).

Now, the memory concern is not a problem for a class like this:

class A
{
    bool b;
    short s;
}

Obviously we don't need word alignment here, and we could probably optimize
given that. But consider:

class B
{
    A a;
}

Suddenly that bool field has to suck an entire machine word's worth of space
for 'a' to be aligned correctly.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
May 24 2012
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=8139




15:00:11 MSD ---

 Now suppose we added an extra bool field to Object.
From Sean Kelly's reply at NG:
 rt_finalize currently nulls out the vtbl pointer, which can server as an
isAlive flag if desired.
Link: http://forum.dlang.org/thread/jo0p3a$aue$1 digitalmars.com#post-mailman.323.1336157840.24740.digitalmars-d:40puremagic.com -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
May 24 2012
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=8139




CEST ---
In that case, I have no objections to doing this.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
May 24 2012
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=8139


Jacob Carlborg <doob me.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |doob me.com



 From Sean Kelly's reply at NG:
 rt_finalize currently nulls out the vtbl pointer, which can server as an
isAlive flag if desired.
Link: http://forum.dlang.org/thread/jo0p3a$aue$1 digitalmars.com#post-mailman.323.1336157840.24740.digitalmars-d:40puremagic.com
The vtbl is only needed for virtual methods. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
May 24 2012
prev sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=8139




CEST ---
It's still set for all objects because it contains a pointer to type info.

(The other machine word is the monitor.)

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
May 24 2012