Re: Some errors in MIT's intro C++ course
On Sep 18, 11:22 pm, Pavel
<pauldontspamt...@removeyourself.dontspam.yahoo> wrote:
James Kanze wrote:
[...]
There may be some disagreement as to what is meant by "in
real life", or "commonly prefered". We all know that
there's an awful lot of bad code being written, and that a
lot of programmers are too concerned about performance when
it is not an issue. (The same programmers, by the way, tend
to write very poorly performing programs when performance is
an issue.) So the issue is whether we're talking about the
real life over the set of all programmers, or only over the
set of competent programmers working in well managed
environments. Competent C++ programmers commonly prefer
leaving bounds checking in when delivering their product.
(If they can afford the runtime overhead.)
Library writers usually can't afford it.
Make that third party library writers:-).
They rarely have certainty that the performance of a
particular API will never be critical for any client code.
Agreed. And the problem is that you can only turn it on or off
globally, for the entire program (since it affects the size of
std::vector). Which means that if the library has it turned on,
the library can't be used by code which has a time critical use
of std::vector elsewhere.
The obvious solution is to deliver two versions of the library.
Or to deliver source code, and let the client compile it with
the options he feels appropriate. (Long term, I think we're
going to have to go with the latter. It seems like there are
more and more options which affect binary compatibility, and
there's a limit to how many versions you can deliver.)
Thus, in library code you usually use the fastest (that is,
unsafe) API, check correctness explicitly (e.g. with asserts
or more often with library- or company- specific analogue)
wherever necessary and deliver both a debug version with the
checks preprocessed-in and a production version with the
checks preprocessed-out. If you plan to only support VC you
could take advantage of its bound-checking [] for the debug
version but in these days of no MS monopoly it's probably
wiser to invest little more keystrokes and type the checks in
explicitly.
If you support VC, and you are delivering precompiled libraries,
you almost have to provide the two versions. And the "debug"
version will have all of the checks turned on.
--
James Kanze