Transitive const sucks
Robert Fraser
fraserofthenight at gmail.com
Wed Sep 12 20:13:15 PDT 2007
Bill Baxter Wrote:
> Walter Bright wrote:
>
> > 1) Programmers aren't that good. Sure, a few are, but most of us aren't,
> > and we write code we imagine is thread safe but really isn't. See Scott
> > Meyer's article on double checked locking, for example.
> >
> > 2) Even if a programmer is that good, programmers still have bad days.
> > It's why pilots have checklists for everything, and always use them, no
> > matter how well they've memorized them.
> >
> > 3) Programmers being good doesn't help the code auditor, who has to
> > always assume the worst.
> >
> > 4) Automation to detect flaws is better than relying on human failings.
>
> You use these arguments to justify that it's the compiler's job to help
> the user write thread-safe code. However, the same exact arguments
> apply to helping the user write "modification-safe" code -- I.e. code
> that doesn't modify anything not intended. This is what C++'s
> const/mutable combo gives you, and it seems useful to me.
>
> > C++'s is not intuitive, marginally useful, and not checkable.
>
> Well, there's no proof at this point that D's const will be any more
> intuitive than C++'s (so far it's seeming less so). As for "marginally
> useful" -- C++ const helps people document the intended logical
> operation of their code. It's quite useful in that. Just not for
> optimization or multithreading purposes. As for "not checkable" --
> what are all those "const int* doesn't match int*" errors I get when I
> try to compile my C++ code? It serves its purpose.
>
> You are fond of comparing C++ const to painting a black stripe on your
> chest and calling it a seat belt. It's humorous, but the comparison is
> inapt. C++ const is in fact a *LOT* like a seat belt in that it'll save
> your a** maybe 90% of the time, but not that other 10%. A painted
> stripe will save you %0 of the time, and that's simply not true of C++
> const. Used properly, const in C++ probably points out something like
> 90% of potentially dangerous mistakes. Note: *Not talking about
> multithreading mistakes here!*, but rather more mundane mistakes. But
> programmers make plenty of the mundane kinds too.
>
> I think a more apt seatbelt analogy would be "seatbelts are worthless
> because all it takes is a simple pair of scissors to render them
> ineffective." That doesn't make seatbelts any less useful for those of
> use who use them properly. What you're after with D's const is not a
> seatbelt but like some sort of full-body airbag that will let you drive
> into oncomming traffic at 200MPH and still walk away unscathed. (like
> this maybe: http://www.zorb.com/ :-))
>
> The goal of making life easy for multithreaded programming is great.
> But I think the less stringent variant of const found in C++ also has
> its uses. Maybe it's impossible to design a usable system that provides
> both, but I think you do the entire C++ community a disservice by
> offhandedly condemning C++ const as merely 'marginally useful'.
>
> --bb
D's current const fixes both problems rather nicely, I still can't see the big argument against it semantically (syntax is a matter of taste, I like it, but it appears no one else does).
More information about the Digitalmars-d
mailing list