T.init, struct destructors and invariants - should they be called?

Steven Schveighoffer schveiguy at yahoo.com
Tue Jul 10 00:01:28 UTC 2018


On 7/7/18 11:06 PM, FeepingCreature wrote:
> On Friday, 6 July 2018 at 23:37:30 UTC, Simen Kjærås wrote:
>> As for alignment, GC, and possibly other things, the code was not 
>> intended as a complete implementation of Nullable, only to show that 
>> an actual member of type T is not necessary. These issues are fixable, 
>> if perhaps nontrivial in some cases.
>>
>> -- 
> 
> Yeah, sorry - that was a snap answer; union is indeed not a solution, 
> particularly since it doesn't even work for types with elaborate 
> destructors.
> 
> That said, I agree that this can be implemented, however imo the fact 
> that we have to retrace the work of the compiler in laying out the data 
> is a warning sign - imo, it happens because what we actually want is for 
> the compiler to *work a different way*, which is why we find ourselves 
> painstakingly recreating its interna in userland, except with different 
> destructor semantics. This points at a flaw in the language, imo - if we 
> so urgently need a way to express different semantics, we shouldn't have 
> to painstakingly hide the type behind the compiler's back; the compiler 
> should have our back in this instead of fighting us.

Hm... this reminds me of the recent discussion around __symbols, and how 
they are treated specially.

Could we reserve some subset of those symbols to say "treat these 
differently"?

Or have an attribute that marks a member in such a way? I'm reminded of 
of the future storage class __mutable as well.

-Steve


More information about the Digitalmars-d mailing list