Proposal for Requiring Save/Restore of Sets and Tags

Jason Kraftcheck kraftche at cae.wisc.edu
Thu Oct 21 12:04:26 CDT 2010


On 10/21/2010 11:35 AM, Carl Ollivier-Gooch wrote:

> 
> It's possible that it's a useful capability, but it's semantically
> incompatible with either of the two mechanisms we currently have
> (subset/set membership and parent/child).  Semantically, the only way to
> have a cycle there is something as silly as set A is an improper subset
> of B is an improper subset of A --- with A and B necessarily identical
> sets.  Parent-child relationships can't semantically have cycles at all.
> 

So we have a capability to construct graphs of sets (parent/child links).
We have functions for querying and manipulating such links named in
accordance with or initial intended uses.  Your argument is to constrain the
functionality based on a semantic argument about the function names.
Wouldn’t it be better (cost nothing and not limit future functionality) to
just rename the functions?  By why even do that?  I just don't see the
problem with a) having this functionality (or at least not prohibiting us
from providing it) and b) naming the functions in such a way as to be least
confusing for the majority of uses.

> 
> 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,
> 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.
> 

You are stating that implementations must conform to a standard behavior of
prohibiting cyclical links.  And then recommending that we disable such
restrictions in the version/build of the code that will be used in practice.
 Then why even make this a requirement?  What's the point of making us jump
through hoops implementing a "strict conformance" build that will only be
used in practice with the conformance tests?  How much code can we change
between the two?  Would instead building a copy of the reference
implementation if strict conformance is requested be okay?

- jason


More information about the tstt-interface mailing list