On Mon, 21 Jan 2008 19:12:06 -0200
"Luis Lavena" <[EMAIL PROTECTED]> wrote:

> No, he removed them:
> 
> http://pastie.caboo.se/141633
> 
> The ragel code will generate the http11_parser.c file, and http11.c
> file defines all the functions pointers:
<snip> 
> Theory indicates that allocation happens way before the ragel code is
> getting executed, so there is no need to evaluate the conditions all
> the time, ending with a speed boost.

That's bullshit.  All of those tests are simple checks to make sure
that you aren't passing in NULL pointers (which happens when the lib is
used generally).  Removing those would be a tiny little impact on the
performance since they're written in raw C.  Only reason that'd speed
things up is if the compiler wasn't doing its job right (which is
possible).

It's also a performance *loss* in that a user of the library has to set
all callbacks always (or get a crash) and then every function is called
even if a user of the lib only cares about a particular piece.

Also, what's happened is now the safety checks against invalid input
are gone too.  Any of those actions could fire in the parser section
and if those variables are not set then the whole program will eat it
bad.

That's a very bad design change, and now I wish I'd gone to the dude's
demonstration so I could tell him.

If someone wanted to optimize this just for the case where every
function is used and always set, but not lose safety then they should
change the constructor to the library to require those functions always
be set.  Then you could remove the if-statements.

-- 
Zed A. Shaw
- Hate: http://savingtheinternetwithhate.com/
- Good: http://www.zedshaw.com/
- Evil: http://yearofevil.com/
_______________________________________________
Mongrel-users mailing list
Mongrel-users@rubyforge.org
http://rubyforge.org/mailman/listinfo/mongrel-users

Reply via email to