Boost logo

Boost Users :

From: Jeff Garland (jeff_at_[hidden])
Date: 2005-10-24 07:35:29


On Mon, 24 Oct 2005 07:08:49 -0400, Piyush Kapadia wrote
> I too tested boost date and found that it is extremely slow and eventually
> had to write code that performs much faster.

For parsing only, or for other purposes? Your general statement isn't precise
enough to be of help. Slowness in the parsing isn't a new report -- there are
certainly a series of changes that would make the to_string routines faster.
Some of them have been submitted over time and have been incorporated. Some
that have been submitted incorporate statics and other techniques that might
compromise the correctness of the library in some environments and hence don't
get added. Submissions are always welcome.

> Speed is one of major strength of C++, we should produce performance
> details of each module as well.

If you really want to help, perhaps you should consider becoming the Boost
"performance wizard" -- it would be a tremendous amount of work.

> For example boost::variant is 20 times slower than boost::any, which
> are similar in functionality, boost::any is very easy to use and is
> very fast but does not support serialization.

For what operation? There may be good reason why variant must be slower.
 
> -----Original Message-----
> From: boost-users-bounces_at_[hidden]
> [mailto:boost-users-bounces_at_[hidden]] On Behalf Of __PPS__
> Sent: Monday, October 24, 2005 2:18 AM
> To: boost-users_at_[hidden]
> Subject: [Boost-users] date_time:
>
> Are there better conversion functions from ISO date format (calendar,
> ordinal, week dates) in basic and/or extended format? Should
> conversion from invalid iso date like "20050231" fail or produce
> same results as date(2005,02,31). (I know that it produces the same
> results, but is it right to convert invalid iso date representation
> to valid date?)

In 1.33 the following code produces 2 exceptions:

  try {
    std::string ds("20050231");
    date d = from_undelimited_string(ds);
    std::cout << d << std::endl;
  }
  catch(bad_day_of_month& e) {
    std::cout << "exception: " << e.what() << std::endl;
  }

  try {
    date d(2005,02,31);
    std::cout << d << std::endl;
  }
  catch(bad_day_of_month& e) {
    std::cout << "exception: " << e.what() << std::endl;
  }

> Another thing I noted, some conversion functions accept const
> std::string &, but most of them accept plain std::string, isn't
> better to convert all of them to constant references???

Sure unless they copy the string anyway, which I don't think they do.

> If anybody interested, I wrote such function that accepts iso date
> string in any of the above mentioned 6 combinations and returns
> date. It runs 90-100 times faster than equivalent
> date_from_iso_string from boost. And yes, it does make sure that
> "20050229" fails

As I said above, contributions always welcome.

Jeff


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