Run-Time vs. Config-time error checking controls

Mark Miller miller86 at llnl.gov
Thu Oct 21 11:53:02 CDT 2010


On Thu, 2010-10-21 at 09:35, Carl Ollivier-Gooch wrote:
> My memory is that we had already agreed that an implementation is free 
> to skip expensive (and even cheap) checks when compiled in release mode, 

So, I don't recall there being an ITAPS-wide, agreed upon config-time
switch names to control this. Do we have any defined?

I know projects like HDF5 use something like --enable-production or
--enable-debug but I don't honestly know what the adopted 'ITAPS-way'
for this is, if there is one. If not, we might ought to propose one
ASAP.

> though it should do all checks in debug mode.  The latter is very 
> important to help developers debug code, but once it's working (i.e., 
> nothing stupid being done by accident), a lot of those checks are 
> unnecessary, so turning them off for release code is no problem. 
> Conditionally-defined macros will do this.  As Mark said, there are 
> run-time configurable methods for this, too, though I suspect they add a 
> small amount of overhead in practice.

There are indeed config-time ways of managing the amount of work a
library is required to perform for error-checking, etc. And, honestly,
if the ITAPS project as a whole wants to do it using ONLY a config-time
control mechanism, I think that would be ok.

My very strong personal preference, based on a lot of experience with
this kind of thing though, is a run-time check the default behavior of
which is controlled at config-time.

If you config for 'release mode', the checks are OFF by default but can
be turned ON at run-time. If you config for 'development mode', the
checks are ON by default but can be turned off at run-time.

Finally, the run-time controls consist of a) a function in the library
an application can call to affect ON/OFF control and b) an env. variable
or command line argument a user can set to override everything else
(note that a command-line argument appraoch would require a change to
iMesh_newMesh to accept argc/argv from the command line much like
MPI_Init does).

Yeah, there is probably a tiny, imperceptable, run-time cost associated
with doing it this way. However, the flexibility it affords has always
trumped concerns for that ;)

Mark



-- 
Mark C. Miller, Lawrence Livermore National Laboratory
================!!LLNL BUSINESS ONLY!!================
miller86 at llnl.gov      urgent: miller86 at pager.llnl.gov
T:8-6 (925)-423-5901    M/W/Th:7-12,2-7 (530)-753-8511



More information about the tstt-interface mailing list