On Friday, 19 June 2015 at 19:10:11 UTC, Shachar Shemesh wrote:
On 14/06/15 04:31, Adam D. Ruppe wrote:
On Sunday, 14 June 2015 at 00:52:20 UTC, FujiBar wrote:
I have read that in D structs are always allocated on the
stack while
classes are always allocated on the heap.
That's not true; it is a really common misconception.
Putting a struct on the heap is trivial and built into the
language: `S*
s = new S();`
Well....
Yeah. You would get a reference to a struct. The struct will be
on the heap. In that narrow sense, you are right that it is
possible.
However, this does not behave like a normal struct. In
particular, when will the destructor be called? (answer: never,
not even before the memory is collected).
So, no, I think D experts should avoid telling newbies it is
okay to just "new struct foo".[1]
Shachar
1 - The counter argument is, of course, that struct destructors
should not be counted upon to do anything useful anyways, as
they are far from guaranteed to run even in situations where
one would expect them to. This just relates to another area
where D skirts truth in advertising when people say that D
supports RAII.
the destructor bug has been fixed for a while. for your second
point, the issue is that D doesn't separate destructors from
finalizers and it feels like it was designed by someone with
little knowledge in low level memory management honestly.