Dominique Pelle wrote:
> Bram Moolenaar wrote:
>
> > Syntax highlighting of XML with long lines is a lot faster now.
>
> Hi
>
> I was hoping for faster xml syntax highlighting after reading
> the above comment, but using :set regexpengine=1 (old engine)
> is much faster than :set regexpengine=0 (automatic engine).
>
> Here is a comparison using vim-7.3.1090 (big) on Linux x86_64:
>
> 1/ download this xml file:
>
> $ wget
> http://svn.code.sf.net/p/languagetool/code/trunk/languagetool/languagetool-language-modules/fr/src/main/resources/org/languagetool/rules/fr/grammar.xml
>
> 2/ create a simple ~/.vimrc
>
> $ cat ~/.vimrc
> set nocompatible
> set regexpengine=1
> filetype on
> filetype plugin on
> syntax on
>
> 3/ measure (using old regexp engine):
>
> $ time vim -c ':norm G' -c ':redraw|q' grammar.xml
> real 0m3.511s
> user 0m3.444s
> sys 0m0.052s
Did you do this with an older xml syntax file, or the one recently
committed?
> 4/ change "set regexpengine=1" into "set regexpengine=0" in ~/.vimrc
>
> 5/ measure the same command again (using new regexp engine):
>
> $ time vim -c ':norm G' -c ':redraw|q' grammar.xml
>
> real 0m16.429s
> user 0m16.117s
> sys 0m0.256s
>
> So in this xml example, it's x4.7 slower with the new
> regexp engine. Is this expected?
>
> The grammar.xml file contains a few long lines. Here is the
> length of the 5 longest lines:
>
> $ perl -ne 'print length($_), "\n"' < grammar.xml | sort -n | tail -5
> 812
> 924
> 1217
> 1343
> 2312
I have an XML file where the old engine basically gets stuck and I have
to press CTRL-C to get back control. With the new engine it now does
show up.
The new engine is slower on normal patterns. I first want to make the
new engine work with all possible regexp features. Then I want to
automatically fall back to the old engine for patterns where it should
be faster.
Also, we should start using the limit on the look-behind matching. The
XML syntax contains items like this:
[<]\@<=[^ /!?<>"']\+
Clearly the look-behind will only work when going back one or two
characters, going back further won't work. But the engine doesn't know
that, it goes back to the start of the previous line before it gives up.
This is much faster:
[<]\@2<=[^ /!?<>"']\+
Then the engine give up two bytes before where the match needs to end.
Another difference between the old and the new engine is that the new
engine first finds a match with the look-behind. The old engine first
finds a match with what follows. I'm not sure what works best.
There is still a lot of speed optimizing to do, but I first want to make
it work and fix any bugs. It doesn't make sense to optimize something
that doesn't work.
--
The 50-50-90 rule: Anytime you have a 50-50 chance of getting
something right, there's a 90% probability you'll get it wrong.
/// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net \\\
/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\ an exciting new programming language -- http://www.Zimbu.org ///
\\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--
--
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php
---
You received this message because you are subscribed to the Google Groups
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.