Direct access to struct construction, copying and destruction
Benjamin Thaut
code at benjamin-thaut.de
Sun Jul 8 06:23:41 PDT 2012
While writing certain parts of my own little standard library
(containers etc) I had to notice that D has a overcomplicated way of
especially postblitting and destructing structs. By overcomplicated I
mean that you don't have any other choice but to go through a TypeInfo
object to the process correctly.
Postblitting:
If the struct has a postblit constructor you can directly call
__postblit but if it does not have one, you have to go over the TypeInfo
object to call __fieldPostBlit which is not directly exposed.
Destruction:
Pretty mutch the same situation as for postblitting. If it has a own
destructor you can call __dtor, but if not you have to use the typeinfo
object to call the destructor because the appropirate destructor is not
directly exposed.
I find this strange because having to go through a TypeInfo object,
which is a lot of unneccessary indirections for calling a function that
is known at compile time and could even be inlined if it would be called
directly, seems totaly overkill to me.
I would find it extremly usefull for low level code (unsafe of course)
to have 3 simple functions that do the following:
cpctor: if present struct needs to be copy constructed, always calls the
correct copy constructor
postblit: if present the struct needs to be postblit constructed, calls
__postblit if the struct has a own postblit constructor, otherwise it
calls __fieldPostBlit
dtor: if present the struct needs to be destructed. Calls the
appropriate destructor.
This would give a better low level control over struct construction and
destruction and would allow compilers to inline the functions if
appropriate.
If some or all of the above is wrong, I'm going to look forward to
beeing corrected.
Kind Regards
Benjamin Thaut
More information about the Digitalmars-d
mailing list