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.

Reply via email to