Alexei Alexandrov wrote:

> > Instead of doubling each time, which is going to be big chunks quickly,
> > another way would be to first allocate one block at the start size of
> > about 1000 bytes, then set the growsize to 10000.  So we grow at the
> > same speed as before.  Then no extra field or function is needed, it's
> > local change in the regexp code.
> > 
> > Something like:
> >     if (regstack.ga_data == NULL)
> >     {
> >         ga_init2(&regstack, 1, 1000);
> >         ga_grow(&regstack, 1);
> >     }
> >     regstack.ga_growsize = 10000;
> > 
> > I do wonder if the memory needs to be cleared when re-using the
> > allocated memory.  Can you check that?
> > 
> 
> I'd like to get back to this topic - after I use my patch for half a 
> year without a problem.
> 
> The patch is attached. It addresses your comments fully. Please take a look.
> 
> Regarding cleaning the stacks - from what I can tell from the code, it's 
> not needed. regmatch() clears the stack heads in the beginning by 
> resetting the len of arrays, and then it uses only the part of the stack 
> it fills.
> 
> In fact, I also considered moving the stack allocation management 
> directly to regmatch() since the stacks are actually used only there. 
> But it's more cosmetic change and shouldn't affect the functionality in 
> any way (though we may get 2 reallocations per regexec_both call in case 
> of big chunks).
> 
> So does the patch look like a good one to you? Or will I just live with 
> it here locally? :)

The patch looks OK to me.  The big question is: how much performance do
we gain?

There is also another regexp improvement underway, this was part of the
Google summer of code.  It would be nice if we have a performance
measurement mechanism, so that the regexp stuff can be tuned.  A Vim
script would be best, so that it can be run everywhere.  Perhaps using
some of the syntax highlighting, since that uses regexp a lot and
provides a real-world situation.  Since the actual display updating is
not what we want to measure, using the synID() function might work.
Combined with ":syn sync fromstart".

-- 
ARTHUR:       Now stand aside worthy adversary.
BLACK KNIGHT: (Glancing at his shoulder) 'Tis but a scratch.
ARTHUR:       A scratch?  Your arm's off.
                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD

 /// Bram Moolenaar -- [EMAIL PROTECTED] -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///

--~--~---------~--~----~------------~-------~--~----~
You received this message from the "vim_dev" maillist.
For more information, visit http://www.vim.org/maillist.php
-~----------~----~----~----~------~----~------~--~---

Raspunde prin e-mail lui