Re: The D Programming Language
"Andrei Alexandrescu (See Website For Email)"
<SeeWebsiteForEmail@erdani.org> writes:
David Abrahams wrote:
Jean-Marc Bourguet <jm@bourguet.org> writes:
Instead you are writing to an object which was supposed to be out of
existence for a long time. In my experience, that give you the same kind
of elusive bugs. Excepted that purify pcan't help you
I want to emphasize that point: when nothing is truly illegal (like
those things that C++ says cause undefined behavior), there's no way a
tool like Purify can tell you that the program did something wrong.
But in a memory-safe program you don't even need Purify to tell you that
the program did something wrong. A logging module would suffice, and the
proof is in the trace.
a. I don't see how the logging module can do that
b. Anyway, that's often far too late to actually debug the problem.
The important tidbit that makes it all work is that bugs anywhere in the
program can't mess the logging subsystem.
That's a useful characteristic.
Let's face it. Memory safety is too nice a property.
It's nice, I agree. I don't know if it's "too nice."
If the argument is that it leads to messier languages and slower
programs, I'd agree. But IMHO the arguments brought in this thread
didn't carry much weight.
So my answer to "Purify can't tell you..." is "Because you don't
need Purify".
Of course not. That's a cute comeback but misses the point entirely.
In a GC'd system Purify is the wrong tool because there are no invalid
pointers. Instead you need a tool that tells you that something has
been kept alive too long, and nobody's figured out a tool to do that
because it's effectively impossible for a tool to tell what "too long"
is.
and that random behaviour including crashes are replaced by
deterministic, often plausible but wrong results.
Of course that can happen in a system with undefined behavior, too.
That said, it looks like a wash to me: incorrect programs have
different characteristics under the two systems but neither one wins
in terms of debuggability.
The memory-safe program wins because it never overwrites arbitrary
memory; so all objects unaffected by a bug respect their invariants.
The same is trivially true of C++: all objects unaffected by a bug
respect their invariants.
--
Dave Abrahams
Boost Consulting
www.boost-consulting.com
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]