From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: "ry dahl" Newsgroups: gmane.comp.lang.ruby.mongrel.devel Subject: Re: Pure Ruby HTTP parser Date: Thu, 24 Apr 2008 13:38:03 +0200 Message-ID: <3ae7f4480804240438g62ed7190if2a84ff08dd2fe34@mail.gmail.com> References: Reply-To: mongrel-development-GrnCvJ7WPxnNLxjTenLetw@public.gmane.org NNTP-Posting-Host: lo.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit X-Trace: ger.gmane.org 1209037106 26675 80.91.229.12 (24 Apr 2008 11:38:26 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Thu, 24 Apr 2008 11:38:26 +0000 (UTC) To: mongrel-development-GrnCvJ7WPxnNLxjTenLetw@public.gmane.org Original-X-From: mongrel-development-bounces-GrnCvJ7WPxnNLxjTenLetw@public.gmane.org Thu Apr 24 13:39:00 2008 Return-path: Envelope-to: gclrmd-mongrel-development@m.gmane.org In-Reply-To: Content-Disposition: inline X-Google-Sender-Auth: e47311d1a5b2be91 X-BeenThere: mongrel-development-GrnCvJ7WPxnNLxjTenLetw@public.gmane.org X-Mailman-Version: 2.1.9 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Original-Sender: mongrel-development-bounces-GrnCvJ7WPxnNLxjTenLetw@public.gmane.org Errors-To: mongrel-development-bounces-GrnCvJ7WPxnNLxjTenLetw@public.gmane.org Xref: news.gmane.org gmane.comp.lang.ruby.mongrel.devel:50 Archived-At: Received: from rubyforge.org ([205.234.109.19]) by lo.gmane.org with esmtp (Exim 4.50) id 1Jozn2-0003eb-Co for gclrmd-mongrel-development@m.gmane.org; Thu, 24 Apr 2008 13:39:00 +0200 Received: from rubyforge.org (rubyforge.org [127.0.0.1]) by rubyforge.org (Postfix) with ESMTP id 59D9218585B1; Thu, 24 Apr 2008 07:38:15 -0400 (EDT) Received: from yw-out-2324.google.com (yw-out-2324.google.com [74.125.46.30]) by rubyforge.org (Postfix) with ESMTP id B77CD18585B1 for ; Thu, 24 Apr 2008 07:38:12 -0400 (EDT) Received: by yw-out-2324.google.com with SMTP id 5so367662ywh.59 for ; Thu, 24 Apr 2008 04:38:05 -0700 (PDT) Received: by 10.150.84.41 with SMTP id h41mr154860ybb.220.1209037083242; Thu, 24 Apr 2008 04:38:03 -0700 (PDT) Received: by 10.70.117.6 with HTTP; Thu, 24 Apr 2008 04:38:03 -0700 (PDT) List-Post: 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 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 > Mongrel-development-GrnCvJ7WPxnNLxjTenLetw@public.gmane.org > http://rubyforge.org/mailman/listinfo/mongrel-development > >