On Thu, 28 Dec 2006 21:14:53 +1000, Igor Plekhov penguin@ocean.vvo.ru wrote:
It is on sbcl-0.9.16 under Linux.
WILD> (time (scan (list :sequence :everything "abc") "foobar")) Evaluation took: 0.017 seconds of real time 0.006998 seconds of user run time 0.0 seconds of system run time 1 page fault and 4,456,456 bytes consed. NIL
WILD> (time (scan (list :sequence :everything "abc" :everything) "foobar")) Evaluation took: 0.0 seconds of real time 0.0 seconds of user run time 0.0 seconds of system run time 0 page faults and 0 bytes consed. NIL
Why so great difference?
Because for the first expression CL-PPCRE realizes that it can add a special test for the constant string "abc" at the end. For the second, it can't.
There must be two :everything around something to the trick to work.
PS. Yes, I need a scan pattern generated at run time. With a static pattern it works incredibly fast, as usual.
Bind *USE-BMH-MATCHERS* to NIL and you should be set.
* (let ((*use-bmh-matchers* nil)) (time (scan (list :sequence :everything "abc") "foobar")))
Evaluation took: 0.0 seconds of real time 0.0 seconds of user run time 0.0 seconds of system run time 0 calls to %EVAL 0 page faults and 0 bytes consed. NIL
Cheers, Edi.