Boost logo

Boost :

From: Greg Colvin (gcolvin_at_[hidden])
Date: 2001-03-19 11:42:20


> From: "Greg Colvin" <gcolvin_at_[hidden]>
>
>
> > Except that, as I recall it, William's thread code is designed
> > such that CloseHandle cannot fail. If it does fail it is a bug,
> > but not in the clients code. And furthermore, the whole point
> > of the thread code is for the client not to have to know or care
> > about handles at all. It is an artifact of the implementation
> > on a particular system that there is a handle at all, that it
> > needs closing, that it gets closed when it does, and that the
> > call to close can fail.
>
> Correct. So when the assert fires, this indicates a library bug or that
> something unanticipated by the library designer happened.
>
> What does the user gain? Library bugs should be caught by unit tests, not by
> users-turned-beta-testers, at least in a perfect world.
>
> It may be a good idea to output a warning using some kind of logging
> mechanism, but the code should not "fail", whatever your definition of
> "fail" is. Give the user the option to ignore the error - it's not his/her
> fault. Cope with the error in the best way possible.
>
> > So I have no trouble with an assert in this case, as it seems
> > wrong to throw an exception that means "Something that was
> > supposed to be impossible has happened, so all bets are off.
> > Proceed at your own risk."
>
> I agree that an exception is not appropriate. I'm arguing that (1)
> undocumented "assert" uses are bad, and (2) the proper way to document an
> "assert" is by using the term "undefined behavior."

So the documentation is this? "If there is an error in my code,
or the compiler that compiled it, or the system code that it depends
on, or the hardware that the system code depends on, or any other
unforseen circumstance, then undefined behavior might occur. Use at
your own risk."

> > > Don't underestimate the rule "assert() only when the docs say 'undefined
> > > behavior'". It only _looks_ like it's a no-brainer, but has deep
> > > implications.
> >
> > Yes it does, but I'm not sure I like them. I generally follow
> > the rule "assert the invariant".
>
> See above - the user gets an "Assertion failed - invariant()" message. So
> what?
>
> Of course, if the invariant is "p != 0", where p is a pointer, and the
> method uses *p, there's nothing wrong with assert'ing that p != 0. We're in
> undefined behavior land anyway, assert or not.

    WARNING: This product warps space and time in its vicinity.
    WARNING: This product attracts every other piece of matter in the universe, including the
    products of other manufacturers, with a force proportional to the product of the masses and
    inversely proportional to the distance between them.
    CAUTION: The mass of this product contains the energy equivalent of 85 million tons of TNT
    per net ounce of weight.
    HANDLE WITH EXTREME CARE: This product contains minute electrically charged particles
    moving at velocities in excess of five hundred million miles per hour.
    CONSUMER NOTICE: Because of the "uncertainty principle," it is impossible for the
    consumer to find out at the same time both precisely where this product is and how fast it is
    moving.
    ADVISORY: There is an extremely small but nonzero chance that, through a process known
    as "tunneling," this product may spontaneously disappear from its present location and
    reappear at any random place in the universe, including your neighbor's domicile. The
    manufacturer will not be responsible for any damages or inconveniences that may result.
    READ THIS BEFORE OPENING PACKAGE: According to certain suggested versions of the
    Grand Unified Theory, the primary particles constituting this product may decay to
    nothingness within the next four hundred million years.
    THIS IS A 100% MATTER PRODUCT: In the unlikely event that this merchandise should
    contact antimatter in any form, a catastrophic explosion will result.
    PUBLIC NOTICE AS REQUIRED BY LAW: Any use of this product, in any manner
    whatsoever, will increase the amount of disorder in the universe. Although no liability is
    implied herein, the consumer is warned that this process will ultimately lead to the heat
    death of the universe.
    NOTE: The most fundamental particles in this product are held together by a "gluing" force
    about which little is currently known and whose adhesive power can therefore not be
    permanently guaranteed.
    ATTENTION: Despite any other listing of product contents found hereon, the consumer is
    advised that, in actuality, this product consists of 99.9999999999% empty space.
    NEW GRAND UNIFIED THEORY DISCLAIMER: The manufacturer may technically be
    entitled to claim that this product is ten-dimensional. However, the consumer is reminded
    that this confers no legal rights above and beyond those applicable to three-dimensional
    objects, since the seven new dimensions are "rolled up" into such a small "area" that they
    cannot be detected.
    PLEASE NOTE: Some quantum physics theories suggest that when the consumer is not
    directly observing this product, it may cease to exist or will exist only in a vague and
    undetermined state.
    COMPONENT EQUIVALENCY NOTICE: The subatomic particles (electrons, protons, etc.)
    comprising this product are exactly the same in every measurable respect as those used in
    the products of other manufacturers, and no claim to the contrary may legitimately be
    expressed or implied.
    HEALTH WARNING: Care should be taken when lifting this product, since its mass, and
    thus its weight, is dependent on its velocity relative to the user.
    IMPORTANT NOTICE TO PURCHASERS: The entire physical universe, including this
    product, may one day collapse back into an infinitesimally small space. Should another
    universe subsequently re-emerge, the existence of this product in that universe cannot be
    guaranteed.


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk