[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