[cl-ppcre-devel] Re: Does PPCRE cache scanners?

Edi Weitz edi at agharta.de
Tue Dec 21 07:12:18 UTC 2004


[Cc to mailing list]

On Mon, 20 Dec 2004 17:44:05 -0800, Dave Roberts <ldave at droberts.com> wrote:

> Does CL-PPCRE cache scanners when you just pass in a string to scan
> or scan-to-strings? That is, if I just say (SCAN-TO-STRINGS "a
> regex" "string-to-scan for a regex"), is it compiling "a regex" to a
> scanner every time, or is it caching that expression for later?

Hi Dave!

There's more than one answer to this question:

1. CL-PPCRE never compiles scanner in the sense that the Lisp compiler
   is invoked.  It just combines existing closures which means, e.g.,
   that in delivered applications you can excise the compiler from the
   image and CL-PPCRE will still work.

2. Nevertheless, creating a scanner (as with CREATE-SCANNER) still
   takes some time because the regex has to be parsed and the chain of
   closures has to be created in memory.

3. If it encounters a constant (see CONSTANTP in the CLHS) regular
   expression, CL-PPCRE uses compiler macros to make sure the scanner
   is created only once - at load time.  See this for an explanation:

     <http://www.pentaside.org/paper/compilermacro-lemmens/compiler-macros-for-publication.txt>

   So this'll apply to your example above.

4. I briefly thought about generally caching scanners but realized
   that it is kind of orthogonal to the rest of CL-PPCRE so I'll leave
   it up to the user to do it if he needs it.

Cheers,
Edi.



More information about the Cl-ppcre-devel mailing list