Why does nobody seem to think that `null` is a serious problem in D?

Alex sascha.orlov at gmail.com
Wed Nov 21 23:27:25 UTC 2018


On Wednesday, 21 November 2018 at 21:05:37 UTC, aliak wrote:
> On Wednesday, 21 November 2018 at 17:46:29 UTC, Alex wrote:
>> compiled against 4.6.1 Framework.
>>
>> However, of course, there is a NullReferenceException, if c 
>> happens to be null, when calling baz.
>>
>> So the difference is not the compiler behavior, but just the 
>> runtime behavior...
>>
>> How could the compiler know the state of Random anyway, before 
>> the program run.
>
> The compiler would not be able to prove that something was 
> initialized and hence could give an error. Maybe c# doesn't do 
> it but swift certainly does:
>
> class C {
>     func baz() {}
> }
>
> func f() {
>     var x: C
>     if Int.random(in: 0 ..< 10) < 5 {
>         x = C()
>     }
>     x.baz()
> }
>
> error: variable 'x' used before being initialized

Nice! Didn't know that... But the language is a foreign one for 
me.

Nevertheless, from what I saw:
Shouldn't it be
var x: C?
as an optional kind, because otherwise, I can't assign a nil to 
the instance, which I can do to a class instance in D...
and if it is, it works in the same manner as C#, (tried this out! 
:) )

Comparing non-optional types from swift with classes in D is... 
yeah... hmm... evil ;)

And if you assume a kind which cannot be nil, then you are again 
with structs here...

But I wondered about something different:
Even if the compiler would check the existence of an assignment, 
the runtime information cannot be deduced, if I understand this 
correctly. And if so, it cannot be checked at compile time, if 
something is or is not null. Right?


More information about the Digitalmars-d-learn mailing list