Andrei mentioned work on reference counting recently so I'm assuming there's still plans on implementing DIP74¹.

With reference counted objects built into the language, it might be worth investigating dropping destructors from all non-RC'd GC allocated objects for a complete separation of objects that control resources and need finalization, and objects that do not.

The current destructor implementation is incredibly bug prone, and is often almost always misused. It has already been made quite clear that you _can not_ rely on the GC for releasing resources². The current GC is even non-reentrant³, meaning that you can't allocate in destructors. You also have to assume any other reference to heap-allocated memory is in an undefined state during a destructor, further limiting their usefulness.

Furthermore, not having to worry at all about destructors would improve the performance of the GC. The GC could just mark large blocks of memory as free without having to scan which blocks of memory have destructors, which can slow down sweeping(I have yet to do any sort of testing on this, it is just a theory.)

One of the main concerns when choosing D as a language is the GC performance, I think this is a well accepted fact. It's worth evaluating anything that might improve the performance of the GC in my opinion.

Bye.

¹ - http://wiki.dlang.org/DIP74
² - http://dlang.org/class.html#Destructor "... The garbage collector is not guaranteed to run the destructor for all unreferenced objects" ³ - http://dlang.org/phobos/core_exception.html#.InvalidMemoryOperationError

Reply via email to