emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: find-file-noselect needs save-match-data


From: David Kastrup
Subject: Re: find-file-noselect needs save-match-data
Date: Thu, 14 Jun 2007 19:18:25 +0200
User-agent: Gnus/5.11 (Gnus v5.11) Emacs/22.1.50 (gnu/linux)

Richard Stallman <address@hidden> writes:

>     >     Anyway, such a function should likely _return_ the corresponding
>     >     match-data (rather than setting a global variable to it), and things
>     >     like match-beginning should optionally take an argument for this
>     >     particular match-data.
>
>     Then what's the advantage compared to using save-match-data?
>
> This function would be simpler, and probably noticeably faster, than
>
>     (save-match-data
>        (string-match X Y)
>        (match-data))
>
> You have a valid point that this function would be somewhat
> slower than a similar function which returned only the position
> of the start of the match.  I am not sure whether this speed
> difference is significant.  Would someone like to try
> implementing those two functions, and see how they compare
> in speed to the expression above?

I think we have the problem that
a) save-match-data is a Lisp macro using (match-data), and
b) match-data constructs a very expensive data structure: it takes
quite a bit of consing, the default is to get markers, and accessing
any piece of match data is O(n) instead of O(1).

The basic global match-data structure is an array.  Maybe we should
make save-match-data a cheap C operation.  Another possibility for an
(incompatible) API change would be that save-match-data _clears_ the
match-data.  That way, nested calls of save-match-data become cheap
since the inner levels don't need to allocate anything.

Once save-match-data becomes cheap (and nested calls very cheap), one
can propose that, as a rule, non-interactive functions should leave
the match-data alone.

All of the proposals of when to call and when not to call
save-match-data revolve around the problem that save-match-data is an
expensive operation. If we get rid of that problem, we don't need to
weigh advantages and disadvantages that much.

-- 
David Kastrup, Kriemhildstr. 15, 44793 Bochum




reply via email to

[Prev in Thread] Current Thread [Next in Thread]