(non)nullable types
Sebastian Biallas
groups.5.sepp at spamgourmet.com
Wed Feb 11 14:40:40 PST 2009
Christopher Wright wrote:
> Sebastian Biallas wrote:
>> Christopher Wright wrote:
>>> Oh, and I vote no. I think it's needless complexity. I code without
>>> any special care for null objects, and I get a segfault or
>>> NullReferenceException maybe once a week, probably less. I've always
>>> been able to track down the bug very quickly.
>>
>> That misses the point completely. It's not about you (as the
>> programmer) getting NPEs; it's about the user getting bug-free
>> software in the first place.
>>
>> In most cases a segfault/NPE is easy to track down for the programmer,
>> I guess nobody would object to this. But once the software is shipped,
>> it's a very serious problem: It's a situation the programmer didn't
>> thought about so you usually have a data loss.
>
> Your language features should get rid of bugs that are easy to make and
> difficult to track down. It's not worthwhile to alter your language to
> remove easily found, easily fixed bugs.
Once your software is running, an easy to fix bug is just as bad as an
hard to fix bug. It's a bug after all.
Of course, you can ask the question whether it's worthwhile to alter the
language. Well, for D this is still possible, while other languages will
have NPEs till the end of the world.
> Logic errors are difficult to find. Your language cannot help you
> eliminate those (though contracts and unittests can help you find them).
"We shouldn't try to avoid bugs of type A because we can't avoid bugs of
type B" is a logical fallacy.
> If you do not test your software extensively, you will ship software
> with logic errors. The testing required to find logic errors will also
> find low-level errors like segfaults.
Uh.... sorry, but reality proves you wrong. I (and the rest of the
world) get NPE in various kinds of extensively tested software.
And we can get rid of *all* these errors by a simple language change (A
change that should have been done centuries ago). This is a case where
you can automatically proof correctness of a specific detail of your
software. A chance that shouldn't be ignored because, uh, it's an easy
to fix bug (If your rocket to the moon explodes because of an easy to
fix bug, well, I don't think that is helps you that it was at least an
easy to fix bug).
Sebsatian
More information about the Digitalmars-d
mailing list