<div dir="ltr">2008/7/25 Chris Anderson <span dir="ltr"><<a href="mailto:jchris@grabb.it">jchris@grabb.it</a>></span><br><div class="gmail_quote"><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<div class="Ih2E3d">On Thu, Jul 24, 2008 at 6:56 PM, Bob Ippolito <<a href="mailto:bob@redivi.com">bob@redivi.com</a>> wrote:<br>
> I'd be curious to know if leex/yecc can do any better than mochijson2<br>
> (which is written by hand), especially considering that it uses<br>
> binaries instead of strings.<br>
<br>
</div>The version of mochijson2 that is in CouchDB's trunk (not in use) is<br>
about twice as fast as cjson - which is used by CouchDB currently.<br>
<br>
After spending a day writing my own leex/yecc parser, it turns out to<br>
be about 3 times slower than cjson, and about 6 times slower than<br>
mochijson2. I could probably optimize the grammar definition to try to<br>
make it faster. I was hoping that the magic of parser-generators would<br>
give me a big jump on the hand-crafted code. Since it didn't, I don't<br>
plan to pursue it any further.<br>
<br>
If anyone wants to see the leex/yaac code, I can put it online.</blockquote><div><br>I have looked at Chris's code and done some optimising of the leex .xrl file. It now goes about 3.5 times faster than before and is only about 20% slower than mochijson2. At least for a limited range of input files. Though Chris uses lists for input as well as for strings while the mochiweb uses binaries. How much this affects the speed I don't know.<br>
<br>The difference is *much* less than I expected and *much* *much* easier to read and understand. If I was doing ít I might consider handwriting the scanner and usng the yecc generated parser. One benefit of the leex generated scanner is that it is re-entrant which means it can easily handle input coming in chunks, as well as being directly usable in the i/o system.<br>
<br>The yecc grammar is trivial.<br><br>As yet leex cannot generate a scanner which will work directly on binaries, but this is no real problem but will unfortunately result in code almost duplication.<br><br>Parse tools rule,<br>
<br>Robert<br><br></div></div></div>