Keyword to avoid not null references

Simen Kjaeraas simen.kjaras at gmail.com
Mon Apr 23 01:47:22 PDT 2012


On Mon, 23 Apr 2012 10:38:27 +0200, Dmitry Olshansky  
<dmitry.olsh at gmail.com> wrote:

> On 23.04.2012 12:06, Simen Kjaeraas wrote:
>> On Mon, 23 Apr 2012 09:14:12 +0200, Namespace <rswhite4 at googlemail.com>
>> wrote:
>>
>>> I made several tests with NotNull yesterday and actually they all  
>>> passed.
>>> In special cases i didn't get a compiler error but then a runtime
>>> error is better then nothing. :)
>>>
>>> But there is still my problem with this:
>>>
>>> void foo(NotNull!(Foo) n) {
>>>
>>> }
>>>
>>> void bar(Foo n) {
>>>
>>> }
>>>
>>> in my optinion it must exist a way that both
>>> NotNull!(Foo) nf = new Foo();
>>>
>>> foo(nf);
>>> bar(nf);
>>>
>>> and furhtermore
>>> Foo f = new Foo();
>>>
>>> foo(f);
>>> bar(f);
>>>
>>> compiles.
>>> We need some hack, implicit cast or compiler cast that cast or passes
>>> Foo to NotNull!(Foo).
>>>
>>> Any suggestions?
>>
>> No. The whole point of NotNull is that it should enforce not being null.
>> Allowing implicit casting from PossiblyNull to NotNull would break this.
>
> Just include obligatory run-time check when crossing null-NotNull  
> boundaries.
>

Which carries with it hidden runtime costs that are unacceptable to some.
The point of NotNull is twofold - safety (you know it's not null) and speed
(you don't need to check if it's null). The latter goes out the window if
implicit casting were allowed.


More information about the Digitalmars-d-learn mailing list