On 04/22/2012 12:48 AM, Namespace wrote:
On Saturday, 21 April 2012 at 22:18:02 UTC, Adam D. Ruppe wrote:
We can do not null in the library reasonably
well. I have a basic one in github:
https://github.com/D-Programming-Language/phobos/pull/477
So every time i want to avoid null references i have to write
"NotNull!(Foo) f" (or better, because it's a struct: "ref NotNull!(Foo)
f")? And therefore i must initialize them with NotNull!(Foo) f = new
Foo();? That would be a little annoying. What if i needed in function
bar only Foo f which can be null but in quatz i need a not null Reference?
In my opinion the best way would be to initialize them with Foo f = new
Foo(); and if i pass them to bar, it will be implicit cast to
NotNull!(Foo).
But this implies a runtime check.
I think, that would be the best idea.
The only thing that disturbing me, is, that it is a struct and therefore
it passes by value instead as reference
You might have a wrong mental model of how classes and structs work in D.
A class reference is much like a struct of the following form:
struct ClassRef{
ClassImpl* impl;
}
and that it is more to write as
just "@" or "@ref".
And only the trivial cases are catched during compilation.