One could replace http11's parser with some regular expressions and out-of-bounds checking rather easily. I think Kirk Haines did this (?) and said it was rather comparable in speed to the C/Ragel state machine. I guess that wasn't really the point of your exercise, but it's worth noting, if anyone actually wants a pure ruby http parser.
ry On Thu, Apr 24, 2008 at 2:50 AM, Tony <[EMAIL PROTECTED]> wrote: > Before anything else, let me state this: Of course it's going to be > PAINFULLY slow on MRI. That's not the point :) > > I thought I'd try out writing out a Ruby version of the parser for the > purposes of Rubinius. For those of you who aren't aware, Ragel supports a > goto-driven FSM on Rubinius by injecting assembly directly, and Rubinus head > honcho guy Evan Phoenix is working on a patch for Ragel to update it to the > new compiler semantics. So really, there is a purpose for trying this out. > > Anyway, here's my initial hack. It's nasty, and presently jams the entire > FSM into instance-specific data. Aieee! But it more or less seems to > generate similar (albeit not identical) output to the C one: > > http://git.rubini.us/?p=code;a=blob;f=lib/mongrel/http11_parser.rb.rl;h=508f9bd42b4aad322f357637d52576f780707a2f;hb=868732662abbf4aa571bf2f3d598152467f6f4da > > I've thought about having a Mongrel::HttpParser::FSM module to store the > actual Ragel-generated state machine, and pass all ivars from the > Mongrel::HttpParser to an execute method then recapture them as return > values, or something to that effect. > > Thoughts? Suggestions? Complete rewrites? I'd appreciate them all. > > -- > Tony Arcieri > medioh.com > _______________________________________________ > Mongrel-development mailing list > [email protected] > http://rubyforge.org/mailman/listinfo/mongrel-development > > _______________________________________________ Mongrel-development mailing list [email protected] http://rubyforge.org/mailman/listinfo/mongrel-development
