null references redux + Looney Tunes

Jeremie Pelletier jeremiep at gmail.com
Sat Oct 3 07:49:05 PDT 2009


Andrei Alexandrescu wrote:
> Justin Johansson wrote:
>> For the interest of newsgroups readers, I dropped in at the Cafe the 
>> other day and
>> the barista had this to say
>>
>> http://cafe.elharo.com/programming/imagine-theres-no-null/
>>
>> Disclaimer: YMMV
>>
>> Cheers
>>
>> -- Justin Johansson
> 
> This article brings up a very interesting point that beats Walter's 
> argument to a pulp, then puts salt on it.
> 
> Walter's overriding argument (I'm sure you know it, he repeated it 
> claiming nobody understands it until we learned it by heart) was: "I 
> don't want the compiler to require a value there! People will just put 
> some crappy value in to get the code to compile, and the code with 
> errors in it will soldier on instead of duly crashing! How is that 
> better???" etc.
> 
> Yet D has structs.
> 
> Walter knows D has structs, and knows how D structs operate. He put 
> structs in D because he thought structs, vegetables, exercising, and 
> flossing are good for you.

We all know a serving of structs a day makes for healthy programmers!

> Yet structs operate the exact way that Walter claim is pernicious. 
> Structs don't have a singular null value and always are nominally valid 
> objects.

You're comparing value types to reference types. A class object is also 
always valid, its the reference that can be null by pointing to no 
object. You would have the same semantics by using struct pointers.

> Yet I've never heard Walter continuing his argument with "Just look at 
> those stinky structs. It must be a million times I had a bug caused by 
> the absence of null structs! I just had to put a crappy struct there in 
> my code, and my code soldiered on in error instead of crashing!"

I never pass structs by value in D, except for returns because of RVO, 
so I can get a null struct pointer sometimes, but thats what contracts 
and backtraces are for. If my code was still executing on an invalid 
struct reference it would be much, much harder to pinpoint the origin of 
the bug.

> Why didn't he continue his argument that way? And why didn't anybody 
> else continue his argument that way? Because nobody has had such a 
> problem. Everybody uses structs, and everybody's happy about them 
> lacking null.

Once again, structs are value types.

> To complete the irony, Walter and I discussed a while ago about structs 
> and .init values. We concluded that D, at least for the time being, will 
> allow struct construction without any code invocation, by just 
> bitcopying the .init value of the struct over. He was very happy about 
> that because a lot of code generation got majorly simplified that way. 
> (I was less happy because that meant less user control over struct 
> construction.) So Walter was happy that he had for structs a feature he 
> thinks is amazingly dangerous for classes.

Classes have an initializer too, it's just copied by the GC after 
allocation instead.

> So I don't think Walter's argument is invalid, I think it simply doesn't 
> exist. This post made it disappear.
> 
> 
> Andrei

I disagree, you compared apples to oranges here. Correct me if I'm 
wrong, but I don't think we should base an argument over reference types 
by using value types.

Jeremie



More information about the Digitalmars-d mailing list