Boost logo

Boost :

From: David Abrahams (dave_at_[hidden])
Date: 2003-09-25 14:27:08


Alexander Nasonov <alnsn-mycop_at_[hidden]> writes:

> I'm waiting for positive answer ;)

Here's what I have so far. Not what we hoped for, I guess:

"John H. Spicer" <jhs_at_[hidden]> writes:

> David Abrahams wrote:
>> Alexander Nasonov just posted something to Boost which was so
>> astounding that I felt I _had_ to check it out with the CWG. It's a
>> long-standing desire of many programmers that they be able to simply
>> link a translation unit containing some static initialization into
>> their program, without disturbing the program's other translation
>> units in any way, and be sure that the static initializations in the
>> new translation unit would take place at program startup. Long ago I
>> gave up on this as a pipe dream, because 3.6.2/3 seemed to say that I
>> would have to invoke a function defined in the new translation unit
>> elsewhere in my program.
>> Alexander's technique seems to rely on the fact (?) that an inline
>> function is defined in *all* translation units where it's used. Is
>> there a problem with his idea? Do implementations actually support
>> it?
>
> I don't agree with that interpretation of 3.6.2. I have always
> assumed that the 3.6.2 was intended to permit an implementation that
> loads object files on-demand, so that the use of an unresolved
> reference to a function or object would cause the object file to be
> loaded and the static initializations to be performed. In such a
> model, a use of an inline function would only cause the object file to
> be loaded if it happened that the implementation required an
> out-of-line definition in that object file.

I have always made the same assumption. I am left with the following
questions:

    1. Is our assumption about intent correct?

    2. Regardless of what the intent may have been, is Alexander's
       interpretation supported by the standard text (it seems to be)?

    3. Do we have a defect?

    4. Can something reasonably be done to make this coding idiom work
       in a future standard without compromising on-demand loading?

I ask #4 because it *really* is very desirable to have the capability.

-- 
Dave Abrahams
Boost Consulting
www.boost-consulting.com

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