dereferencing null
Chad J
chadjoan at __spam.is.bad__gmail.com
Sun Mar 4 22:19:05 PST 2012
On 03/04/2012 11:39 PM, Adam D. Ruppe wrote:
> On Monday, 5 March 2012 at 03:24:32 UTC, Chad J wrote:
>> News to me. I've had bad runs with that back in the day, but maybe
>> things have improved a bit.
>
> Strangely, I've never had a problem with gdb and D,
> as far back as 2007.
> (at least for the basic stack trace kind of stuff).
>
> But, yeah, they've been improving a lot of things
> recently too.
>
>> Non-nullable types would be really cool right about now.
>
> Huh, I thought there was one in phobos by now.
>
> You could spin your own with something like this:
>
> struct NotNull(T) {
> T t;
> alias t this;
> @disable this();
> @disable this(typeof(null));
> this(T value) {
> assert(value !is null);
> t = value;
> }
>
> @disable typeof(this) opAssign(typeof(null));
> typeof(this) opAssign(T rhs) {
> assert(rhs !is null);
> t = rhs;
> return this;
> }
> }
>
>
> This will catch usages of the null literal at
> compile time, and other null references at runtime
> as soon as you try to use it.
>
> With the disabled default constructor, you are forced
> to provide an initializer when you use it, so no
> accidental null will slip in.
>
> The alias this means NotNull!T is substitutable for T,
> so you can drop it into existing apis.
>
That's cool. Maybe someone should stick it in Phobos? I haven't had
time to try it yet though. I also didn't know about @disabled; that's a
nifty addition.
>> It's that I simply cannot expect users to run my code in a debugger.
>
> :) I'm lucky if I can get more from my users than
> "the site doesn't work"!
>
Ugh!
This sort of thing has happened in non-web code at work. This is on an
old OpenVMS system with a DIBOL derivative language and people accessing
it from character-based terminals. Once I finally got the damn system
capable of broadcasting emails reliably (!!) and without using disk IO
(!!), I started having it send me stack traces of things before it dies.
The only thing left that's really annoying about this is I still have
no way of determining whether an exception is going to be caught or not
before I send out the email, so I can't use it in cases where things are
expected to throw sometimes (ex: end of file exception, key not found
exception). So I can only do this effectively for errors that are
pretty much guaranteed to be bad news.
I hope Phobos will have (or already have) the ability to print stack
traces without crashing from an exception. There are (surprisingly
frequent) times when something abnormal happens and I want to know why,
but it is safe to continue running the program and the last thing I want
to do is crash on the user. In those cases it is very useful for me to
grab a stacktrace and send it to myself in an email.
I can definitely see web stuff being a lot less cut-and-dry than this
though, and also having a lot of blind-spots in technologies that you
can't control very easily.
>> The problem is that they don't help me when I missed a spot and didn't
>> use assertions, contracts, or invariants.
>
> Aye, I've had it happen. The not null types might help,
> though tbh I've never used anything like this in practice
> so maybe not. I don't really know.
More information about the Digitalmars-d
mailing list