Re: [boost] Serialization Library Review

2002-11-11 Thread Mattias Flodin
On Mon, Nov 11, 2002 at 09:07:40AM -0500, David Abrahams wrote:
In this system, we use term serialization to mean a system where
the current state of group of objects can be stored to a permanent
medium that may outlast the current program execution. At any later
time an equivalent group of objects can be restored from the
permanent medium. It is the goal of this system to permit this
facility to be included in any C++ program with a minimium of
additional effort.

This description seems to indicate that the serialization library is not
intended for other uses of serialization than giving an object lifetime
beyond that of the program. For instance, serializing an object as a
step in preparing it to be transferred to another computer in a
distributed program. Is this true, or am I interpreting the text in a
too narrow-minded way?

-- 
Mattias Flodin [EMAIL PROTECTED]  -  http://www.cs.umu.se/~flodin/
Room NADV 102
Department of Computing Science
Umeå University
S-901 87 Umeå, Sweden
--
During the Middle Ages, probably one of the biggest mistakes was not putting
on your armor because you were just going down to the corner. -- Jack Handy
___
Unsubscribe  other changes: http://lists.boost.org/mailman/listinfo.cgi/boost



[boost] Re: pool benefit ratio for different compilers

2002-11-11 Thread Bohdan
[EMAIL PROTECTED] wrote in message
news:22602E7E3B92D411969B0090273CC28B1D235F;cecexchange.cec.jerviswebb.com...
 As John pointed out, you're not going to see much benefit (if any) when the
 standard library contains a pool allocator itself (as does STLport and
 glibc).

All boost::pool library is about allocation of small objects
of the same size. I'm just curious how malloc can be
accelerated if it handles different size allocations?
May be boost will also need something like that.
I understand that char can be treated as small object,
but i'm not sure if boost::fast_pool_allocator gives any acceleration
in this case.

regards,
bohdan






___
Unsubscribe  other changes: http://lists.boost.org/mailman/listinfo.cgi/boost



[boost] Re: function redesign for dynamic_any

2002-11-11 Thread Alexander Nasonov
Douglas Gregor wrote:

 On Monday 11 November 2002 08:32 am, Alexander Nasonov wrote:
 Additionally, two types of control are desired:
 1) Control over real types of arguments. It is a limitation of
 dynamic_any library that arguments must be converted to _one_ type before
 a call. But they can be of different types. Problem can be easily solved
 by adding additional arguments to the 'call' member-function:

   templatetypename Arg
   bool less::call(const Arg  a, const std::type_info  ta,
   const Arg  b, const std::type_info  tb) const
   {
 return a  b;
   }
 
 I'm not sure I see why we need this functionality, but perhaps I'm not
 being imaginative enough at this hour. Do you have an example where this
 would help?

It was at the end of my post.
I know how it's hard to understand details without sufficient knowledge of 
the topic. I tried to start documentation but it still unusable.

This functionality can be usefull but not quite often. I think it's better 
to keep 'call' member function for simple use and introduce different name 
(call_ex?) for advanced use. So, you can use one of:

  // 1)
  templatetypename Arg
  bool call(const Arg  a, const Arg  b) const;
  // 2
  templatetypename Arg
  bool call_ex(const Arg  a, const std::type_info  ta,
   const Arg  b, const std::type_info  tb) const;

Implementation can first try to call 'call_ex' and if it throws internal 
exception (default behavoir) then revert to 'call' member-function.

Some further thoughts and questions.
1. Support for N-unary functions (currently N=1,2). With increase of N 
complexity is aslo increased. Imagine that you have N 'any' arguments a1 
... aN that hold values v1 ...vN of type T1 .. TN and you would like to 
call a foo defined as:

  struct foo : functionfoo, void (const arg , , const arg )
   // 'const arg ' repeated N times
  {
templateclass Arg
void call_ex(const Arg  v1, const std::type_info ,
 ...
 const Arg  vN, const std::type_info ) const
{
  // user defined implementation
}
  };

Current algorithm takes first argument a1 (which holds value v1 of type T1) 
and tries to extract T1  from a2 ... aN. If all extractions are ok then 
invoke the foo:

  foo  func = ...
  func.call_ex(v1, typeid(v1),
   extractT1 (a2), a2.type(),
   ...
   extractT1 (aN), aN.type());
Otherwise apply the same to a2, ... aN arguments.
Remember that every extract uses dynamic_cast for a hierarchy with multiple 
inheritance. Even for small N it can be expensive. Though some optimization 
can be made IMHO.

2. Code bloat caused by generation of class hierarchy for every holded type. 
This hierarchy is central to implementation and cannot be changed to 
something else (but number of virtual functions can be minimized). The only 
way is to teach users minimalizm in the library usage.

3. Integration with other libraries such as Serialization, variant and 
visitor libraries.

Best regards,
Alexander Nasonov
mailbox: alnsn
server: mail.ru



___
Unsubscribe  other changes: http://lists.boost.org/mailman/listinfo.cgi/boost



[boost] Re: Proposed Boost Assert -- once again

2002-11-11 Thread Eric Woodruff
I've always used the examples out of TC++PL of some assertions:

template typename Exception
assertion (bool const condition) {
 if (!condition) {
throw Exception ();
}
}

template typename Exception
assertion (bool const condition, Exception const exception) {
if (!condition) {
throw exception;
}
}

What about having a function-class based assertion that worked like:

assertion (!Sanity::invalidArgument || 0 != p, Throw (invalid_argument
(must not be zero)));

assertion (2  x, Abort ());

or maybe even

assertion (2  x, DontCompile ());


 implementation ---

template typename Function
assertion (bool const condition, Function const f) {
if (!condition) {
f ();
}
}

It looks very idiomatic to me.

I've also found things like this useful:

template typename Condition, typename Exception
Condition const assertNonZero (Condition const condition) {
if (0 == condition) {
throw Exception ();
}

return condition;
}


Consider:

return x / assertNonZerorange_error (b - a);


Kevin S. Van Horn [EMAIL PROTECTED] wrote in message
news:Pine.LNX.4.44.020833530.25298-10;speech.cs.ndsu.nodak.edu...
 It's been six days since I posted this, without a single response, so I'm
 going to try again.  Based on earlier discussions, I thought there might
 be some interest in this.  Does anyone have any problems with the proposed
 interface?  Should I turn this into a formal proposal for submission to
 Boost?  Peter, how does this compare with the changes to
 boost/assert.hpp you were planning to do / are doing?






___
Unsubscribe  other changes: http://lists.boost.org/mailman/listinfo.cgi/boost



Re: [boost] BOOST_HAS_NRVO

2002-11-11 Thread David Abrahams
Daniel Frey [EMAIL PROTECTED] writes:

 David Abrahams wrote:
 
 Daniel Frey [EMAIL PROTECTED] writes:
 
  That was me, although I have no CVS write access
 
 Why don't we just fix that? What's your SourceForge UserID?

 dfrey42

 Seems I have something to do for my 56K modem this evening - and I have
 to read some docs on CVS branches... :o) Thanks!

Done. Don't forget to ssh in to cvs.boost.sourceforge.net to create
your home directory.

-- 
   David Abrahams
   [EMAIL PROTECTED] * http://www.boost-consulting.com
Boost support, enhancements, training, and commercial distribution

___
Unsubscribe  other changes: http://lists.boost.org/mailman/listinfo.cgi/boost



Re: [boost] Boost.Bind testing patch for Sun

2002-11-11 Thread David Abrahams
Peter Dimov [EMAIL PROTECTED] writes:

 From: David Abrahams [EMAIL PROTECTED]
 
 Even after applying other workarounds, the following patch seems to be
 required to get the Boost.Bind test to pass on the latest Sun
 compilers. Is it appropriate to apply this, or should this problem
 cause the test to fail?
 
 -BOOST_TEST( bind(X::hash, _1)(x) == 23558 );
 +BOOST_TEST( bindunsigned int(X::hash, _1)(x) == 23558 );

 I think that the right thing is to #ifdef the bind path for Sun only.

Thanks for responding, Peter. Would you mind making that change?

-- 
   David Abrahams
   [EMAIL PROTECTED] * http://www.boost-consulting.com
Boost support, enhancements, training, and commercial distribution

___
Unsubscribe  other changes: http://lists.boost.org/mailman/listinfo.cgi/boost



Re: [boost] boost::array and VC7 (oil water)

2002-11-11 Thread Douglas Paul Gregor
On Mon, 11 Nov 2002, Victor A. Wagner, Jr. wrote:
 I deleted the token BOOST_DEDUCED_TYPENAME  and nothing obvious
 happens  I still get the same error(s) in my compile.

... or try replacing BOOST_DEDUCED_TYPENAME with just typename. My
experience with MSVC 6 is that it handles the typename keyword very
strangely. Sometimes it helps to have it, sometimes it helps to not have
it.

Doug

___
Unsubscribe  other changes: http://lists.boost.org/mailman/listinfo.cgi/boost



Re: [boost] Re: function queue

2002-11-11 Thread William E. Kempf

Eric Woodruff said:
 William,

 I'm not sure. I haven't been following the development branch, and don't
 know exactly how to access it.

$ cvs co -r thread_development boost
would check out the thread_development branch.  Tweak as needed for your
environment.

 I called this class a function queue
 based on what I saw of the currently released boost::thread::thread_pool
 which was merely a collection of various threads that provided a grouped
 join.

I think you're talking about boost::thread::thread_group here.  The
boost::thread::thread_pool in the thread_development branch sounds like
your function queue, unless I'm misunderstanding something from your
short description.

 I needed to be abstracted from the thread itself. Thus, thread was
 not a good choice in the class's name.

I'm not sure I follow this, but here's a short example of using a
thread_pool.

int min_threads=3;
int max_threads=10;
int timeout=10; // seconds
boost::thread_pool pool(max_threads, min_threads, timeout);
pool.add(some_function_object);
pool.add(some_function_object);
pool.add(some_function_object);
pool.add(some_function_object);
pool.add(some_function_object);

The number of threads that will be used to dispatch the queued function
objects will expand and contract between min_threads and max_threads, with
idle threads waiting for the specified timeout before terminating if there
are more than min_threads available.

The user never directly accesses a thread in a thread_pool.  He only adds
function objects to a queue on which the pooled threads will work.

-- 
William E. Kempf


___
Unsubscribe  other changes: http://lists.boost.org/mailman/listinfo.cgi/boost



Re: [boost] Boost.Bind testing patch for Sun

2002-11-11 Thread David Abrahams
Peter Dimov [EMAIL PROTECTED] writes:

 From: David Abrahams [EMAIL PROTECTED]
 Peter Dimov [EMAIL PROTECTED] writes:

  From: David Abrahams [EMAIL PROTECTED]
 
  Even after applying other workarounds, the following patch seems to be
  required to get the Boost.Bind test to pass on the latest Sun
  compilers. Is it appropriate to apply this, or should this problem
  cause the test to fail?
 
  -BOOST_TEST( bind(X::hash, _1)(x) == 23558 );
  +BOOST_TEST( bindunsigned int(X::hash, _1)(x) == 23558 );
 
  I think that the right thing is to #ifdef the bind path for Sun only.

 Thanks for responding, Peter. Would you mind making that change?

 It would be more appropriate for someone with access to Sun C++ to make
 Sun-specific changes. :-)

Neither of us has that at the moment, but I want to make sure the
change doesn't get lost.

-- 
   David Abrahams
   [EMAIL PROTECTED] * http://www.boost-consulting.com
Boost support, enhancements, training, and commercial distribution

___
Unsubscribe  other changes: http://lists.boost.org/mailman/listinfo.cgi/boost



Re: [boost] Re: Re: function queue

2002-11-11 Thread William E. Kempf

Eric Woodruff said:
 Yeah, it's the same concept. I had failed to distinguish thread_pool
 versus thread_group.

 Hopefully, adding the timeout and growing logic does not sacrifice the
 efficiency of the pool when it is full/has plenty to work on.

Shouldn't be a large issue.  If the pool is full (i.e. max_threads has
been created and all are busy) the queue can still be added to, so there's
no effect to the performance of add.  The check for being full is a simple
integer comparison, so shouldn't effect the performance.  The check for
decaying a thread uses conditions and timeouts, so also should not effect
the efficiency.  The only thing that can effect efficiency is the actual
act of creating a thread when the pool grows, but careful specification of
min/max/timeout can optimize this.  If you have to, you can specify
min/max to be the same, thus fixing the size of the pool and ensuring you
never incur the overhead of growing the pool.  However, this will often be
at a sacrifice to resource utilization, so individual needs will have to
dictate how one defines these parameters.

-- 
William E. Kempf


___
Unsubscribe  other changes: http://lists.boost.org/mailman/listinfo.cgi/boost



Re: [boost] iterator adaptors docs tid

2002-11-11 Thread David Abrahams
Yitzhak Sapir [EMAIL PROTECTED] writes:

 In the iterator docs for generator_iterator:

 http://www.boost.org/libs/utility/generator_iterator.htm

 It says (under title The Generator Iterator Object Generator):

 template class Generator
 typename generator_iterator_generatorGenerator::type
 make_function_output_iterator(Generator  gen);

 The last line should say: make_generator_iterator.

Fixed in CVS
-- 
   David Abrahams
   [EMAIL PROTECTED] * http://www.boost-consulting.com
Boost support, enhancements, training, and commercial distribution

___
Unsubscribe  other changes: http://lists.boost.org/mailman/listinfo.cgi/boost



Re: [boost] Re: function redesign for dynamic_any

2002-11-11 Thread Douglas Gregor
On Monday 11 November 2002 11:45 am, Alexander Nasonov wrote:
 This functionality can be usefull but not quite often. I think it's better
 to keep 'call' member function for simple use and introduce different name
 (call_ex?) for advanced use. So, you can use one of:

   // 1)
   templatetypename Arg
   bool call(const Arg  a, const Arg  b) const;
   // 2
   templatetypename Arg
   bool call_ex(const Arg  a, const std::type_info  ta,
const Arg  b, const std::type_info  tb) const;

 Implementation can first try to call 'call_ex' and if it throws internal
 exception (default behavoir) then revert to 'call' member-function.

I'm assuming you aren't referring to an actual C++ exception. I would assume 
that the default behavior of call_ex would be to call the call function in 
the derived class (assuming you are still planning to use the curiously 
recurring template pattern).

 Current algorithm takes first argument a1 (which holds value v1 of type T1)
 and tries to extract T1  from a2 ... aN. If all extractions are ok then
 invoke the foo:

This seems like the best approach to me.

Doug
___
Unsubscribe  other changes: http://lists.boost.org/mailman/listinfo.cgi/boost



Re: [boost] Re: function queue

2002-11-11 Thread Beman Dawes
At 12:56 PM 11/11/2002, William E. Kempf wrote:

Eric Woodruff said:
 William,

 I'm not sure. I haven't been following the development branch, and 
don't
 know exactly how to access it.

$ cvs co -r thread_development boost
would check out the thread_development branch.  Tweak as needed for your
environment.

If you just want to look at a file or two, you can do it via the browser 
interface.  See http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/boost/boost/

You can use the Show only files with tag: list at the bottom of the page 
to control what branch you are looking at.

HTH,

--Beman


___
Unsubscribe  other changes: http://lists.boost.org/mailman/listinfo.cgi/boost


[boost] config missing #define for Metrowerks compiler EH support

2002-11-11 Thread Alberto Barbati
Hi,

would it be possible to add the following piece of code somewhere in 
boost\config\Metrowerks.hpp:

- begin code

#if !__option(exceptions)
#   define BOOST_NO_EXCEPTIONS
#endif

- end code

I guess the code is self-explanatory.

Alberto Barbati



___
Unsubscribe  other changes: http://lists.boost.org/mailman/listinfo.cgi/boost


[boost] Re: Re: Re: Property_map docs

2002-11-11 Thread Edward Diener
Jeremy Siek [EMAIL PROTECTED] wrote in message
news:Pine.GSO.4.44.020951350.6135-10;zaphod.osl.iu.edu...
 Hi Edward,

 Since you feel so strongly about this, please write a new version of the
 property map docs and send them to me.

 In future emails, I would appreciate it if you refrained from using such
 an accusatory tone. At this point I'm feeling hurt by your words and
 discouraged about volunteering my time to boost.

I apologize for sounding accusatory. I don't understand what you are at with
property_map although I discern a good idea in there. I just don't
understand why you are unwilling to explain it in terms that others can use
more easily. I know that I am missing how the mechanism works which links
the property_map concept to the get(), put(), and operator[] functions.

It is your idea and your documentation. If you feel that the documentation
is fit for the use of others, so be it. I will move on to other libraries
which I can understand. But I would like you to think about the possibility
that what you perhaps understand intuitively, others don't because they
don't have the information necessary to use your idea.

I don't want to ever discourage you or any others from contributing to an
organization so devoted to software excellence as Boost is. I am truly sorry
if any nastiness crept into the discussion in my efforts to understand your
software.


 Sincerely,
 Jeremy

 On Mon, 11 Nov 2002, Edward Diener wrote:
 eddiel Jeremy Siek [EMAIL PROTECTED] wrote in message
 eddiel news:Pine.GSO.4.44.021110230.4424-10;zaphod.osl.iu.edu...
 eddiel  Hi Edward,
 eddiel 
 eddiel  On Sun, 10 Nov 2002, Edward Diener wrote:
 eddiel  eddiel OK, here are some questions regarding the property map
library;
 eddiel  eddiel
 eddiel  eddiel 1) What is a property map ? Is it a template class, a
class, a
 eddiel  eddiel template function, a function ?
 eddiel 
 eddiel  It is a concept, as the term is used in the SGI STL docs:
 eddiel  http://www.sgi.com/tech/stl/stl_introduction.html
 eddiel  It has to do with specifying the contract between generic
algorithms
 eddiel  (function templates) and the user of such algorithms.
 eddiel
 eddiel I am aware of your defintion of concept from Matt Austern's fine
book. But
 eddiel concepts imply implementations.
 eddiel
 eddiel 
 eddiel  If you were looking for some useful concrete component to
implement some
 eddiel  kind of mapping, then I'm afraid you will be disappointed in the
property
 eddiel  map library.
 eddiel
 eddiel I am disappointed in the doc. The concept sounds interesting but I
have no
 eddiel idea how it is implemented or used in a real situation.
 eddiel
 eddiel 
 eddiel  eddiel 2) What does the word property mean in the context of
the name ?
 eddiel 
 eddiel  Here by property we mean something that is associated with some
object. I
 eddiel  know this is vague, but there just is not much to the property
map
 eddiel  concept.
 eddiel
 eddiel Yes, it is vague. Does that make you happy about it ?
 eddiel
 eddiel 
 eddiel  eddiel 3) What is the difference between property map and
std::map ?
 eddiel 
 eddiel  std::map is a class. property map is a concept (well, a
collection
 eddiel  of concepts). You can use the boost::associative_property_map
 eddiel  adaptor to adapt std::map into a type that *models* property
map.
 eddiel
 eddiel OK, why not explain that in the doc and how it is done.
 eddiel
 eddiel 
 eddiel  eddiel 4) How does one use a property map ?
 eddiel 
 eddiel  You write function templates with template parameters that
 eddiel  have property map as their requirement.
 eddiel
 eddiel Example of this in the doc please.
 eddiel
 eddiel 
 eddiel  eddiel 5) How does one create a property map of one's own ?
 eddiel 
 eddiel  Create a class and then define get(), put() and operator[]
 eddiel  function for the class.
 eddiel
 eddiel Example of this in the doc please.
 eddiel
 eddiel 
 eddiel  eddiel 6) What are the prototypes for the get(), put(), and
operator[]
 eddiel  eddiel functions, and are these really global functions as the
doc
 eddiel  eddiel suggests or are they functions in the boost namespace ?
 eddiel 
 eddiel  They can live anywhere that argument dependent lookup can find
them, which
 eddiel  means just about anywhere.
 eddiel
 eddiel You didn't answer the first question.
 eddiel
 eddiel 
 eddiel  eddiel 7) What do the various categories actually do for
property maps ?
 eddiel 
 eddiel  Like the iterator tags in the C++ std, they allow function
templates to
 eddiel  dispatch to different code depending on the category of the
property map.
 eddiel
 eddiel Example of this in the doc please, with some function template
showing this
 eddiel technique as practical usage within your concept.
 eddiel
 eddiel 
 eddiel  eddiel I do not believe that any of these questions are
answered clearly
 eddiel  eddiel in the property map documentation although they are all
basic
 eddiel  eddiel points which should be explained to the end user. I 

[boost] Re: Re: Property_map docs

2002-11-11 Thread Ani Taggu
Edward Diener [EMAIL PROTECTED] wrote in message
news:aqnhte$mml$1;main.gmane.org...
 Jeremy Siek [EMAIL PROTECTED] wrote in message
 news:Pine.GSO.4.44.021110230.4424-10;zaphod.osl.iu.edu...
  Hi Edward,
 
  On Sun, 10 Nov 2002, Edward Diener wrote:
  eddiel OK, here are some questions regarding the property map library;
  eddiel
  eddiel 1) What is a property map ? Is it a template class, a class, a
  eddiel template function, a function ?
 
  It is a concept, as the term is used in the SGI STL docs:
  http://www.sgi.com/tech/stl/stl_introduction.html
  It has to do with specifying the contract between generic algorithms
  (function templates) and the user of such algorithms.

 I am aware of your defintion of concept from Matt Austern's fine book.
But
 concepts imply implementations.


I am a frequent listener here and it is quite uncommon to see such offensive
language. I wonder how you can demand better documentation from the
library author who had in spare time crafted a library good enough to be
included in boost.

-Ani




___
Unsubscribe  other changes: http://lists.boost.org/mailman/listinfo.cgi/boost



Re: [boost] boost::array and VC7 (oil vinegar...vinegarette!!)

2002-11-11 Thread Victor A. Wagner, Jr.
That worked!!! replacing BOOST_DEDUCED_TYPENAME  with typename
At Monday 2002/11/11 10:58, you wrote:

On Mon, 11 Nov 2002, Victor A. Wagner, Jr. wrote:
 I deleted the token BOOST_DEDUCED_TYPENAME  and nothing obvious
 happens  I still get the same error(s) in my compile.

 or try replacing BOOST_DEDUCED_TYPENAME with just typename. My
experience with MSVC 6 is that it handles the typename keyword very
strangely. Sometimes it helps to have it, sometimes it helps to not have
it.

Doug

___
Unsubscribe  other changes: http://lists.boost.org/mailman/listinfo.cgi/boost


Victor A. Wagner Jr.  http://rudbek.com
PGP RSA fingerprint = 4D20 EBF6 0101 B069 3817 8DBF C846 E47A
PGP D-H fingerprint = 98BC 65E3 1A19 43EC 3908 65B9 F755 E6F4 63BB 9D93
The five most dangerous words in the English language:
  There oughta be a law

___
Unsubscribe  other changes: http://lists.boost.org/mailman/listinfo.cgi/boost



Re: [boost] boost::array and VC7 (oil vinegar...vinegarette!!)

2002-11-11 Thread David Abrahams
Victor A. Wagner, Jr. [EMAIL PROTECTED] writes:

 That worked!!! replacing BOOST_DEDUCED_TYPENAME  with typename
 At Monday 2002/11/11 10:58, you wrote:
On Mon, 11 Nov 2002, Victor A. Wagner, Jr. wrote:
  I deleted the token BOOST_DEDUCED_TYPENAME  and nothing obvious
  happens  I still get the same error(s) in my compile.

 or try replacing BOOST_DEDUCED_TYPENAME with just typename. My
experience with MSVC 6 is that it handles the typename keyword very
strangely. Sometimes it helps to have it, sometimes it helps to not have
it.

Fixed in CVS

-- 
   David Abrahams
   [EMAIL PROTECTED] * http://www.boost-consulting.com
Boost support, enhancements, training, and commercial distribution

___
Unsubscribe  other changes: http://lists.boost.org/mailman/listinfo.cgi/boost



[boost] Re: Re: Property_map docs

2002-11-11 Thread Edward Diener
Ani Taggu [EMAIL PROTECTED] wrote in message
news:aqpjsn$t89$1;main.gmane.org...
 Edward Diener [EMAIL PROTECTED] wrote in message
 news:aqnhte$mml$1;main.gmane.org...
  Jeremy Siek [EMAIL PROTECTED] wrote in message
  news:Pine.GSO.4.44.021110230.4424-10;zaphod.osl.iu.edu...
   Hi Edward,
  
   On Sun, 10 Nov 2002, Edward Diener wrote:
   eddiel OK, here are some questions regarding the property map
library;
   eddiel
   eddiel 1) What is a property map ? Is it a template class, a class, a
   eddiel template function, a function ?
  
   It is a concept, as the term is used in the SGI STL docs:
   http://www.sgi.com/tech/stl/stl_introduction.html
   It has to do with specifying the contract between generic algorithms
   (function templates) and the user of such algorithms.
 
  I am aware of your defintion of concept from Matt Austern's fine book.
 But
  concepts imply implementations.
 

 I am a frequent listener here and it is quite uncommon to see such
offensive
 language. I wonder how you can demand better documentation from the
 library author who had in spare time crafted a library good enough to be
 included in boost.

I didn't demand anything. Criticizing what I believe to be inadequate
documentation is not a demand. If programmers can't ask for better
technology, and make criticisms accordingly, then we are all in a great deal
of trouble professionally. Improving technology can not be done by
pussyfooting around with endless awe and respect in our eyes. I have yet to
see a valid argument against the suggestions and criticisms I posted. The
doc is poor, but if everyone agrees it is good enough and understandable to
them, fine and so be it.

I am appreciative of many, if not almost all, of the fine ideas and
implementations in the Boost libraries. Is it uncriticizable because it is
freely done ? Sometimes criticism is needed to improve technology, and when
that happens we are all winners.




___
Unsubscribe  other changes: http://lists.boost.org/mailman/listinfo.cgi/boost



[boost] Re: Re: Re: Property_map docs

2002-11-11 Thread Edward Diener
Christoph Kögl [EMAIL PROTECTED] wrote in message
news:1037063128.2680.0.camel;localhost.localdomain...
 Hi Jeremy (and Edward),

 I am just now reading that unfortunate Edward Diener thread. Normally I
 am a quiet Boost
 list/code consumer, but this is the time, I think, to speak up (a
 little), just to let you know
 that there are guys out here that very much appreciate Jeremy's
 contributions to Boost.

I appreciate Jeremy's Siek's other contributions also.

 Edward may have let his frustration take the better of him, and I really
 would like him
 to read through the BGL (Boost Graph Library) docs, because that's where
 property maps
 are used in abundance and where enough example code lives to make the
 concept
 clear. Hey, there even is a book on the BGL which probably (I have not
 read it) talks
 about property maps as well. So, please, Edward, refrain from
 prematurely posting harsh
 remarks about seemingly unsuitable documentation (and note: I am not
 saying anything about
 your not being able to grasp the concept of property maps, I instead
 suppose that you did not
 devote enough time to trying to do so). I, for my part, have been using
 the BGL (along with property
 map implementations) extensively of late, and I cannot say that I
 encountered undue difficulties with
 the BGL/PM docs.

The problem is that property map is presented separately from the BGL.
Therefore a valid assumption would be that one could understand how it works
separately from the BGL.


 Good night.

 PS. Edward, you may want to let us know what exactly your envisioned
 area of application of the property map concept is. Then we may be able
 to help you with
 your specific problem(s). Here are some short answers to some of your
 questions:

I have no envisioned area of application. I was just reading through various
Boost libraries trying to understand ideas and implementations and was
befuddled by the property map docs. It seemed to imply that one could use
generic algorithms to do mapping between a key and a value, and I like this
idea in general, but I couldn't understand the specifics of how this was
done and how it was used. The doc was saying to me there is a way to use
this concept so just dig and investigate and look at the source code and you
will probably figure it out. That may not have been Mr. Siek's thought when
he wrote it but that was my reaction to it. To me that isn't acceptable as
documentation, so I wrote my criticism saying so. I will stand by my
criticism that it isn't the way to explain anything and should be improved.
Mr. Siek doesn't think so, and nobody else does either, so that's fine and I
needn't attempt to use it in any way for myself if I don't understand how to
use it.

 The concept sounds interesting but I
 have no
  idea how it is implemented or used in a real situation.

 Well, the mathematical concept underlying property maps are maps (in the
 mathematical
 sense): let A, B be two sets, then a map m from A to B (denoted m: A-B)
 is a subset of
 AxB (the direct product of A and B) such that for ordered pairs (a,b),
 (a,c) of m we have that
 b=c holds (i.e. maps are left-unique binary relations). If you do not
 understand the concept
 of mathematical maps I am afraid you are out of luck (you =/= Edward
 here, just the anonymous
 you). Boost's property maps are one method to model mathematical maps
 in C++ that mandates
 not the use of one specific implementation (like some predefined
 class(es) of function(s)), rather they
 are merely a set of assumptions. Every C++ software artifact that
 fulfills these assumptions (read:
 abides by the specified syntactic and semantic requirements of the
 property map concept) is a
 property map. Software that in its code only uses the assumptions that
 the property map concept
 mandates (and not more) is guaranteed to work with /every/ artifact
 implementing the property map
 concept.

Thanks for the explanation. I do appreciate it.

 A more familiar case might be the concept of Input Iterator.
 The std::find algorithm works
 for every C++ artifact that implements the Input Iterator concept; you
 are not confined to use
 std::list::const_iterator, std::map::iterator etc., /any/ Input Iterator
 works (not just those from the
 standard library).

Input iterators have necessary implementations which are explained in
detail, or they won'[t work with the generic algorithms which use them.

 So, actually, contrary to what Jeremy says, the
 property map concept in itself
 is not at all vague. It /could/ be defined more rigorously (read:
 formally, which inevitably means
 mathematically, because mathematics really is the only precise language
 humankind currently has).
 But this is not necessary nor would greatly support its understanding
 for the average developer
 (simply because the average developer is not trained in reading precise
 formal specifications like
 algebraic data types, modal/temporal logic, process algebras, whatever).
 The understanding