Am Sat, 28 Jul 2012 05:07:44 +0200
schrieb "bearophile" <bearophileh...@lycos.com>:

> >> // x is a nullable class reference
> >> if (x == null) {
> >>      ...
> >> } else {
> >>      // here the type system sees x as not null.
> >> }
> >
> In the else branch the state of the type of x is not-null, so as 
> example in the else branch you are allowed to call a function 
> that only accept not null references, with the x variable.
> Not-nulls integrated in the type system makes sure you have well 
> initialized variables in the class constructors in presence of 
> inheritance and other complexities.
> It also statically requires you to test for null before 
> deferencing a nullable class reference, ans so on.
> Those are the fruits that a good not-null implementation gives 
> you. You can't do all this with the NotNull toy. NotNull solves 
> only the easy part of the whole problem, and it's a small part.
> 
> Bye,
> bearophile

I found this an interesting read. The implementation likely doesn't interfere 
much with other language features (in a sense like @trusted does to templated 
functions that take potentially unsafe code as parameters).
I especially like how the compiler _statically_ knows, that x is not null in 
the else case. The runtime cost is moved from every call on x, to a single 
if-statement! It could require a little logic to parse complex conditions like 
"if (a == 1 && !x != null)", though ;)

-- 
Marco

Reply via email to