Re: Variables in for loop (style issue)
In-Reply-To: <9bOdnT8coKM0J-vZRVn-jQ@comcast.com>
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit
Walter Bright wrote:
Thorsten Ottosen wrote:
I think std::vector<T> is a good example. Take the iterator interface:
template< ... >
class vector
{
iterator begin();
const_iterator begin() const;
iterator end();
const_iterator end() const;
};
because begin() and end() are overloaded on const, vector<T>
will propagate constness for me.
Ok, I understand - both functions have the exact same implementation,
the only reason for the duplication is to propagate const from the
parameter to the return type.
It's a problem that one has to make a clone of the function in order to
work around what is essentially a defect of the typing system:
Indeed it is, and it's a rather subtle one: lack of parameterization
along type qualifiers. Or storage classes or whatever the language calls
them. I'll take joy in quoting your entire laundry list of problems
caused by this shortcoming in the language, because it really works
against your argument.
As the programmer, I've got to copy/paste code, then carefully insert
the const's in the right place.
As a code reviewer, I've got to check that the two functions have
identical implementations - except where the const differs - not a thing
the human brain is very good at.
As a maintainer, I've got to be sure and propagate bug fixes in one
function to the other. Better not forget!
As a QA guy, I've got to write double the number of test cases to make
sure both functions are fully tested.
As the bloat cop, I've got two functions doing the same thing, taking up
space.
As the tech writer, I have two functions that need documentation.
As the user, I've got two functions to learn instead of one, and hope
they actually do do the same thing.
>
In order to be const-correct, how often does this happen? (I count 8
times for std::vector, is that representative?) If it's a lot, it seems
it'll be rather costly. There's got to be a better way.
Now, again I'm having the problem that I don't know what exactly we're
discussing about, and from which position. Let me come with a parallel.
Scenario 1. We're watching a big-time televised basketball game and a
player makes a silly mistake. Are we entitled to comment on that
mistake? Sure. That guy is supposed to be good because he's there, and I
can criticize because I'm on the couch, presumably supporting him.
Scenario 2. We're playing a friendly basketball game and a player makes
a silly mistake. Automatically, if you criticize that mistake, you're
supposed automatically to be better than him. Otherwise, it just looks
weird.
Now here's my confusion. As this discussion makes progress, I assume
we're in scenario 2. After all, you created a language that overtly
competes with C++, and as such any and all of your comments about C++
invite the "let's see how D did" investigation. But you comment as if
you were comfortably laying on the couch in scenario 1. But there's no
couch - you're sweating in the court together with all of us. As such, I
find D's author's comments about C++'s const being imperfect... pot
*cough* kettle *cough* black! :o)
Andrei
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]