Temporary objects as function parameters or when-is-this-shit-going-to-end?
Jack Applegame
japplegame at gmail.com
Fri Oct 13 10:35:56 UTC 2017
If you don't want to get the great PITA, never create temporary
objects in function parameters.
I recently spent a whole day digging through my reference counted
containers library. But nasty bug was not there, but in the
compiler.
Look at this: https://glot.io/snippets/eui2l8ov0r
Result:
> Bar.this(int): 7FFD3D60CD38
> fun: 7FFD3D60CD20
> Bar.~this(): 7FFD3D60CD20
Compiler creates struct on the stack and silently (without
postblitting and destruction old object) moves it to another
address. Is it normal? I don't think so.
But that's not the most fun.
Look at this: https://glot.io/snippets/eui2pjrwvi
Result:
> Bar.this(int): 7FFF87DD2D31
> fun: 7FFF87DD2CE0
> Bar.~this(): 7FFF87DD2CE0
> Bar.~this(): 7FFF87DD2D31
WAT??? Compiler creates struct on the stack copies it without
postblitting and destructs both objects.
But if you create the structure before calling the function, then
all will be well:
https://glot.io/snippets/eui2vn2bu1
All this greatly angered me because there are several issues
related wrong struct construction and destruction in the
bugtracker. Because of these bugs my low level libraries full of
strange hacks.
I want to ask. How you guys are going to create a reliable RC
library, if such fundamental bugs hang in the issue tracker for
months and years. And instead of fixing them, you develop new
minor bells and whistles.
See: https://issues.dlang.org/buglist.cgi?quicksearch=destructor
Since I myself can't fix such bugs (my knowledge in this area are
extremely small), I have a question to Andrei Alexandrescu:
Can I donate to the D Foundation and that my donations would be
aimed at fixing exactly these bugs?
More information about the Digitalmars-d-learn
mailing list