Struct with default ctor (Was: [dmd-beta] dmd 2.064 beta take 2)

Andrei Alexandrescu SeeWebsiteForEmail at erdani.org
Mon May 20 08:43:35 PDT 2013


On 5/20/13 11:19 AM, Byron Heads wrote:
> On Sun, 19 May 2013 17:36:17 -0400, Andrei Alexandrescu wrote:
>> OK, this is sensible. One question - would you be willing to type
>> symbols as NullType!T instead of T to avoid these issues?
>>
>> Thanks,
>>
>> Andrei
>
> More boiler plate code for functions that take pointers.
>
> void foo(T)(T t)
> 	if(isPointer!T)
> {
>      static if(isNullable!T)
> 	if(!t) throw ....
> }

But this goes both ways. Regardless of the default, you'd sometimes need 
to distinguish between cases. You either hurt one half of your cases or 
the other half. In fact you are now showing the case that assumes 
non-nullable being the default.

> May also introduce then need to check for objects in the init state
> (default state)
>
>
>
> outside of NonNull in stdlib, an attribute maybe a possible answer.
>
> void bar(@nonnull SomeClass o)
> {
> 	o = foo(); // if foo returns @nonnull, then check is not needed,
> else needs a check added during assignment
> }
>
> there are a few compile time checks that can be done to prove o is not
> null, if not the compiler adds runtime checks.

I think a parameterized type is a better match for non-null because it 
attaches to the type, not the symbol.

> But really, checking for valid input is part of programming, might be
> better to have lint integration that can help find these types of problems

Agreed.


Andrei


More information about the Digitalmars-d mailing list