bearophile wrote:
Don:
Maybe if D had better flow analysis, the demand for
non-nullable references wouldn't be so great.
I know a good enough C# programmer that agrees with you, he says that thanks to
the flow analysis C#compiler performs, the need for non-nullable references is
not so strong.
Which is what I said half a dozen times in this thread :)
Disclaimer: I have only read about C#, didn't code it.
(Neither is a pure subset of the other, flow analysis works for all
variables, non-nullable references catches more complex logic errors.
But there is a very significant overlap).
I like how you can see things a little more clearly than other people (like me).
Flow analysis helps for all variables, but it's limited in the scope.
Nonnullable references are a program-wide contract, their effect extends to
called functions, etc. And helps avoid null tests inside them too.
Probably flow analysis is the most important among such two features. I think
having both is better, they can work in synergy.
Bye,
bearophile
Flow analysis must be implemented by the compiler, nonnull references
can be enforced by a runtime wrapper (much like smart_ptr enforces
addref and release calls in C++, you don't see smart_ptr being moved in
the language spec even if half the C++ community would drool over the idea).
The best thing about flow analysis is that we can take away the whole
default initializer idea, since it was made to make non-initialized
variable errors easy to pinpoint in the first place, not as a
convenience to turn "int a = 0;" into "int a;".
Besides DMD must have some basic flow analysis already since it does
notice when a code path does not return, it just need to be extended to
include unitialized variables.