Boost logo

Boost Users :

From: Tobias Schwinger (tschwinger_at_[hidden])
Date: 2008-01-18 04:17:05


Nat Goodspeed wrote:
> Tobias Schwinger wrote:
>
>> thanks for your very positive review.
>
> Thanks for a well-designed library!
>
>>> Very little is said about BOOST_SINGLETON_PLACEMENT and
>>> BOOST_SINGLETON_PLACEMENT_DECLARATION. The reference material mentions
>>> them without any explanation.
>> That "Singletons and dynamic libraries" section explains their purpose.
>>
>> What exactly is missing?
>>
>> I'm not too fond of specifying what those macros expand to and I don't
>> really want to mention them in the introductory section either, as for
>> me they are kind-of workarounds for the imperfect ABIs we have to deal
>> with.
>
> Agreed: I don't want you to document the expansions. But the entirety
> of the reference coverage consists of the words "Placement declaration"
> and "Placement definition," with examples showing how to write them.
> What effects can I expect?
> The "Singletons and dynamic libraries" section says: "There must be
> at most one single instance of a Singleton, even if it is exposed by a
> dynamic library... Keeping the former can be problematic if the
> management code gets inlined into the client or if symbols are not being
> merged automatically. As a solution, this library provides two macros,
> BOOST_SINGLETON_PLACEMENT and BOOST_SINGLETON_PLACEMENT_DECLARATION to
> compile the effective code into a specific source file."

> These macros are a workaround for a problem. The problem appears to
> be more than one instance of the same singleton class in a given
> process.

That's one symptom.

> How would I know I'm susceptible? What's an example scenario?
> On a lame platform, two or more dynamic libraries in the process each
> #include a header for a particular singleton class definition, and
> contain 'instance' invocations? How would I know my platform is lame?

The issue deserves careful investigation even with a "non-lame" ABI in
place :-).

> What's the solution: putting BOOST_SINGLETON_PLACEMENT_DECLARATION
> inside the header class definition, and BOOST_SINGLETON_PLACEMENT inside
> exactly one of the consumer dynamic libraries? What would happen if both
> libraries contained BOOST_SINGLETON_PLACEMENT? If I'm writing a dynamic
> library for use by others, and I use someone else's singleton class
> containing BOOST_SINGLETON_PLACEMENT_DECLARATION, how would I decide
> whether to include BOOST_SINGLETON_PLACEMENT in my library? Or should
> BOOST_SINGLETON_PLACEMENT be used in the main program instead?

It should probably always be used if the Singleton is in some way part
of a dynamic library.

> For me, the documentation doesn't yet answer these two key questions:
> (1) How would I know I need BOOST_SINGLETON_PLACEMENT? (2) Where should
> I put it?

OK, I'll address them when I revise the docs.

Regards,
Tobias


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net