Boost logo

Boost :

Subject: Re: [boost] [serialization] feedback on a possible port of the XML archive grammar to Qi
From: Bryce Lelbach aka wash (admin_at_[hidden])
Date: 2010-09-10 01:55:57


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

On 09/09/2010 02:32 AM, Robert Ramey wrote:
> Note that there is an extensive test suite for the serialization library.
> You should run that on your local machine.

I've finished and done (preliminary) testing on the new grammar. All tests
passed on x86_64-linux-gnu-gcc-4.5.1 (link=shared, variant=debug), four warnings
(unsigned/signed comparisons in other parts of Serialization that I haven't
touched). I've got my machine running the full test suite (link=shared,static,
variant=debug,profile,release).

I'm also running the profile.sh script in performance (I can't find any existing
performance data for Serialization to compare against in the HTML docs, though).

I can't do Windows tests: I currently only have Linux machines available to me.

My local copy of the boost trunk is checked out with svn via https. How should I
get the changes to you for review? Patch?

> My understanding is that the new library is much faster than the currently
> used one so people should be happy about that.

I don't think we'll see a notable speed increase (at least, not with the work
I've done so far). The bottleneck in the xml parser is the input stream ->
intermediary string -> spirit design pattern in
basic_xml_grammar<CharType>::my_parse.

Removing the middleman string is a bit of a problem. A stream iterator such as
std::istream_iterator can't be used with Spirit, because of the backtracking
present in a a recursive descent parser such as Qi.

Spirit provides a multi_pass iterator (fulfills forward iterator) that can wrap
an input iterator for use with Qi. Rules that present the possible need to
backtrack will cause buffering with the multi_pass iterator.

So, to (hopefully) get a respectable increase in speed, I'll have to refactor
the new Qi grammar to minimize use of rules that will backtrack, and then modify
the grammar and interface to use the multi_pass iterator. If the new parser
doesn't break horribly on Windows/other compilers, I'll get started on the
multi_pass stuff this weekend.

 - Bryce Lelbach

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/

iEYEARECAAYFAkyJyGwACgkQO/fqqIuE2t6QqACdE2Cw4OGtbnnclDXx2t2N3lRx
9ZkAn2zH//H16XTMtkpcbAVKF8f4RL/J
=9oYL
-----END PGP SIGNATURE-----


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