From: "Daniel Colascione" <dancol@dancol.org>
To: "Stefan Monnier" <monnier@IRO.UMontreal.CA>
Cc: Daniel Colascione <dancol@dancol.org>, emacs-devel@gnu.org
Subject: Re: [Emacs-diffs] master 938d252 4/4: Make regex matching reentrant; update syntax during match
Date: Sun, 17 Jun 2018 11:51:33 -0700 [thread overview]
Message-ID: <04e89d2beffedcc102b811863910c1ec.squirrel@dancol.org> (raw)
In-Reply-To: <jwvy3fdgt0v.fsf-monnier+emacsdiffs@gnu.org>
>> (unfreeze_pattern, freeze_pattern): New functions.
>> (compile_pattern): Return a regexp_cache pointer instead of the
>> re_pattern_buffer, allowing callers to use `freeze_pattern' if
>> needed. Do not consider busy patterns as cache hit candidates;
>> error if we run out of non-busy cache entries.
>
> IIRC the main/only reason why you can't use a compiled pattern in
> a reentrant way is because the \{N,M\} repetitions use a counter that's
> stored directly within the compiled pattern.
>
> But these are fairly rare.
>
> So we could easily change the code to add a boolean stating whether there
> is such a repetition-counter in the pattern, and if there isn't then
> "freeze" can just do nothing because we can freely use that pattern
> multiple times at the same time.
Good idea. My reading of the "smart jump" stuff in regex.c suggested that
we use the optimization for _all_ greedy Kleene star constructs though,
not just the bounded ones. Am I wrong?
But anyway, I think the regex code needs a major overhaul. I was actually
thinking about forking and vendoring RE2. Granted, having done that, you'd
need a C++ compiler to build Emacs, but it's probably one of the better
actively-maintained DFA-based regex engines around.
next prev parent reply other threads:[~2018-06-17 18:51 UTC|newest]
Thread overview: 36+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <20180616204650.8423.73499@vcs0.savannah.gnu.org>
[not found] ` <20180616204653.86AFC203CB@vcs0.savannah.gnu.org>
2018-06-17 18:42 ` [Emacs-diffs] master 938d252 4/4: Make regex matching reentrant; update syntax during match Stefan Monnier
2018-06-17 18:51 ` Daniel Colascione [this message]
2018-06-17 19:18 ` Daniel Colascione
2018-06-17 19:34 ` Stefan Monnier
2018-06-17 19:50 ` Daniel Colascione
2018-06-17 19:30 ` Stefan Monnier
2018-06-18 15:59 ` Perry E. Metzger
2018-06-18 17:49 ` Daniel Colascione
2018-06-19 13:40 ` Perry E. Metzger
2018-06-19 13:44 ` Perry E. Metzger
2018-06-19 13:49 ` Daniel Colascione
2018-06-19 14:30 ` Perry E. Metzger
2018-06-19 14:33 ` Perry E. Metzger
2018-06-19 14:48 ` Daniel Colascione
2018-06-19 15:37 ` Perry E. Metzger
2018-06-19 16:20 ` Paul Eggert
2018-06-19 16:27 ` Perry E. Metzger
2018-06-19 17:46 ` Stefan Monnier
2018-06-19 18:18 ` Daniel Colascione
2018-06-19 18:26 ` Perry E. Metzger
2018-06-19 16:54 ` John Wiegley
2018-06-19 17:04 ` Perry E. Metzger
2018-06-19 18:20 ` John Wiegley
2018-06-19 18:04 ` Paul Eggert
2018-06-19 18:16 ` Daniel Colascione
2018-06-19 18:26 ` Paul Eggert
2018-06-19 18:03 ` Andreas Schwab
2018-06-19 18:48 ` Paul Eggert
2018-06-19 14:46 ` Daniel Colascione
2018-06-19 14:58 ` Andreas Schwab
2018-06-19 15:32 ` Perry E. Metzger
2018-06-18 23:25 ` Richard Stallman
2018-06-19 1:30 ` Perry E. Metzger
2018-06-19 22:54 ` Richard Stallman
2018-06-20 1:17 ` Perry E. Metzger
2018-06-20 23:26 ` Richard Stallman
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=04e89d2beffedcc102b811863910c1ec.squirrel@dancol.org \
--to=dancol@dancol.org \
--cc=emacs-devel@gnu.org \
--cc=monnier@IRO.UMontreal.CA \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.