https://issues.dlang.org/show_bug.cgi?id=13678
Marco Leise <[email protected]> changed: What |Removed |Added ---------------------------------------------------------------------------- Summary|TypeInfo.init is |TypeInfo.initializer is |inconsistent |inconsistent --- Comment #3 from Marco Leise <[email protected]> --- (In reply to Steven Schveighoffer from comment #2) > As far as I know, there is no mechanism to say you shouldn't initialize the > data. That is correct and my thinking is that this was due to the .init/.initializer property being underspecified, since we do have it in the language: struct Output { double[1024] data = void; } Instead of: null => initializer is all zeroes array of correct length => initializer contains non-zero bytes we could also define three states: ptr is null, length is correct => initializer is all zeroes ptr is null, length == 0 => initializer is void else => initializer contains non-zero bytes This would allow us to avoid a memset where the data structure is explicitly declared with all void initializers. Where the type is statically known, 'x = T.init' can still be more effective, because the compiler can freely chose how to initialize a data structure, based on whether x is already initialized or not, T.init contains a mix of void and non-void fields or if one or more of the fields are overwritten shortly after. typeid(T).initializer is the more blunt tool. T.init is a compiler intrinsic, typeid(T).initializer is data. --
