[article] Language Design Deal Breakers

Jonathan M Davis jmdavisProg at gmx.com
Mon May 27 00:45:26 PDT 2013


On Monday, May 27, 2013 09:27:58 deadalnix wrote:
> What need to be added to the language to make the lib work is
> equivalent to what is needed to make it the default (Make the
> compiler track initialization), and is also required for other
> aspects of the language (initialize immutable objects).

I don't see why. NotNull would statically prevent assigning null to it (which 
is easy to do, since null has its own type) and will assert that any 
references assigned to it are null. You then have the guarantee that NotNull!T 
is never null. What would a built-in type do that that doesn't? The one point 
where null could get in - when constructed from a nullable reference - would 
have to be checked with a built-in type as well. The only way to prevent it is 
to make it illegal to assign a nullable reference to a non-nullable one and 
make it so that construction has to occur within the the non-nullable 
reference - e.g. NotNull!T(args).

> and most modern languages try as hard as possible to get rid of it

Sure, some languages try and get rid of it, but for most part, major languages 
do not. If we were starting from scratch, then maybe it would be worth making 
non-nullable the default, but I completely concur with Walter that the issues 
with nullability are being blown way out of proportion. Sure, dereferencing 
null happens, but there are a ton of other bugs that are far more common. And 
with NotNull, you have a non-nullable reference.

- Jonathan M Davis


More information about the Digitalmars-d mailing list