From: Edi W. <ed...@ag...> - 2004-05-28 01:16:59
|
On Thu, 27 May 2004 19:52:59 -0400, Sam Steingold <sd...@gn...> wrote: > could you please benchmark it against the CLISP PCRE module? See below. I had to test on Cygwin because the Debian CLISP doesn't seem to include PCRE. To be fair to CL-PPCRE I'd like to note that the PCRE module seems pretty useless to me. You can completely kill CLISP (CLISP silently dies) with various small, legitimate regular expressions. Here's one example: edi@bird:~/lisp/cl-ppcre$ clisp -Kfull i i i i i i i ooooo o ooooooo ooooo ooooo I I I I I I I 8 8 8 8 8 o 8 8 I \ `+' / I 8 8 8 8 8 8 \ `-+-' / 8 8 8 ooooo 8oooo `-__|__-' 8 8 8 8 8 | 8 o 8 8 o 8 8 ------+------ ooooo 8oooooo ooo8ooo ooooo 8 Copyright (c) Bruno Haible, Michael Stoll 1992, 1993 Copyright (c) Bruno Haible, Marcus Daniels 1994-1997 Copyright (c) Bruno Haible, Pierpaolo Bernardi, Sam Steingold 1998 Copyright (c) Bruno Haible, Sam Steingold 1999-2000 Copyright (c) Sam Steingold, Bruno Haible 2001-2004 ;; Loading file /home/edi/.clisprc ... ;; Loaded file /home/edi/.clisprc [1]> (pcre:pcre-exec (pcre:pcre-compile "(aa)(.*)") "aaxx") edi@bird:~/lisp/cl-ppcre$ You can also kill it with medium-sized target strings: edi@bird:~/lisp/cl-ppcre$ clisp -Kfull i i i i i i i ooooo o ooooooo ooooo ooooo I I I I I I I 8 8 8 8 8 o 8 8 I \ `+' / I 8 8 8 8 8 8 \ `-+-' / 8 8 8 ooooo 8oooo `-__|__-' 8 8 8 8 8 | 8 o 8 8 o 8 8 ------+------ ooooo 8oooooo ooo8ooo ooooo 8 Copyright (c) Bruno Haible, Michael Stoll 1992, 1993 Copyright (c) Bruno Haible, Marcus Daniels 1994-1997 Copyright (c) Bruno Haible, Pierpaolo Bernardi, Sam Steingold 1998 Copyright (c) Bruno Haible, Sam Steingold 1999-2000 Copyright (c) Sam Steingold, Bruno Haible 2001-2004 ;; Loading file /home/edi/.clisprc ... ;; Loaded file /home/edi/.clisprc [1]> (defparameter *xxxx* (make-string 10000 :initial-element #\x)) *XXXX* [2]> (pcre:pcre-exec (pcre:pcre-compile "(.)*" :dotall t) *xxxx*) edi@bird:~/lisp/cl-ppcre$ Hmmm, I'm not impressed... I had to modify the benchmark and remove a couple of tests to make it work at all. The source code is at <http://miles.agharta.de/bench2.lisp>. Here are the results: edi@bird:~/lisp/cl-ppcre$ uname -a CYGWIN_NT-5.1 bird 1.5.10(0.116/4/2) 2004-05-25 22:07 i686 unknown unknown Cygwin edi@bird:~/lisp/cl-ppcre$ clisp -Kfull i i i i i i i ooooo o ooooooo ooooo ooooo I I I I I I I 8 8 8 8 8 o 8 8 I \ `+' / I 8 8 8 8 8 8 \ `-+-' / 8 8 8 ooooo 8oooo `-__|__-' 8 8 8 8 8 | 8 o 8 8 o 8 8 ------+------ ooooo 8oooooo ooo8ooo ooooo 8 Copyright (c) Bruno Haible, Michael Stoll 1992, 1993 Copyright (c) Bruno Haible, Marcus Daniels 1994-1997 Copyright (c) Bruno Haible, Pierpaolo Bernardi, Sam Steingold 1998 Copyright (c) Bruno Haible, Sam Steingold 1999-2000 Copyright (c) Sam Steingold, Bruno Haible 2001-2004 ;; Loading file /home/edi/.clisprc ... ;; Loaded file /home/edi/.clisprc [1]> (lisp-implementation-version) "2.33 (2004-03-17) (built on winsteingoldlap [10.0.19.22])" [2]> (load "load.lisp") ;; Loading file load.lisp ... ;; Loading file /home/edi/lisp/cl-ppcre/packages.fas ... ;; Loaded file /home/edi/lisp/cl-ppcre/packages.fas ;; Loading file /home/edi/lisp/cl-ppcre/specials.fas ... ;; Loaded file /home/edi/lisp/cl-ppcre/specials.fas ;; Loading file /home/edi/lisp/cl-ppcre/util.fas ... ;; Loaded file /home/edi/lisp/cl-ppcre/util.fas ;; Loading file /home/edi/lisp/cl-ppcre/errors.fas ... ;; Loaded file /home/edi/lisp/cl-ppcre/errors.fas ;; Loading file /home/edi/lisp/cl-ppcre/lexer.fas ... ;; Loaded file /home/edi/lisp/cl-ppcre/lexer.fas ;; Loading file /home/edi/lisp/cl-ppcre/parser.fas ... ;; Loaded file /home/edi/lisp/cl-ppcre/parser.fas ;; Loading file /home/edi/lisp/cl-ppcre/regex-class.fas ... ;; Loaded file /home/edi/lisp/cl-ppcre/regex-class.fas ;; Loading file /home/edi/lisp/cl-ppcre/convert.fas ... ;; Loaded file /home/edi/lisp/cl-ppcre/convert.fas ;; Loading file /home/edi/lisp/cl-ppcre/optimize.fas ... ;; Loaded file /home/edi/lisp/cl-ppcre/optimize.fas ;; Loading file /home/edi/lisp/cl-ppcre/closures.fas ... ;; Loaded file /home/edi/lisp/cl-ppcre/closures.fas ;; Loading file /home/edi/lisp/cl-ppcre/repetition-closures.fas ... ;; Loaded file /home/edi/lisp/cl-ppcre/repetition-closures.fas ;; Loading file /home/edi/lisp/cl-ppcre/scanner.fas ... ;; Loaded file /home/edi/lisp/cl-ppcre/scanner.fas ;; Loading file /home/edi/lisp/cl-ppcre/api.fas ... ;; Loaded file /home/edi/lisp/cl-ppcre/api.fas ;; Loading file /home/edi/lisp/cl-ppcre/ppcre-tests.fas ... ;; Loaded file /home/edi/lisp/cl-ppcre/ppcre-tests.fas ;; Loaded file load.lisp T [3]> (load (compile-file "bench2.lisp")) Compiling file /home/edi/lisp/cl-ppcre/bench2.lisp ... Wrote file /home/edi/lisp/cl-ppcre/bench2.fas 0 errors, 0 warnings ;; Loading file /home/edi/lisp/cl-ppcre/bench2.fas ... ;; Loaded file /home/edi/lisp/cl-ppcre/bench2.fas T [4]> (test) CL-PPCRE wins by a factor of 2.8 CL-PPCRE wins by a factor of 44.0 PCRE wins by a factor of 2.4 PCRE wins by a factor of 1.3 PCRE wins by a factor of 1.3 CL-PPCRE wins by a factor of 3.0 PCRE wins by a factor of 12.0 PCRE wins by a factor of 22.3 PCRE wins by a factor of 14.2 PCRE wins by a factor of 23.8 PCRE wins by a factor of 2.5 PCRE wins by a factor of 1.8 PCRE wins by a factor of 7.2 PCRE wins by a factor of 5.4 PCRE wins by a factor of 12.3 PCRE wins by a factor of 18.9 PCRE wins by a factor of 2.3 PCRE wins by a factor of 1.2 PCRE wins by a factor of 15.8 PCRE wins by a factor of 24.9 PCRE wins by a factor of 13.5 CL-PPCRE wins by a factor of 1.6 PCRE wins by a factor of 12.0 PCRE wins by a factor of 8.9 PCRE wins by a factor of 12.5 PCRE wins by a factor of 11.0 PCRE wins by a factor of 1.4 CL-PPCRE wins by a factor of 1.1 NIL HTH, Edi. |