"m...@apollinemike.com" <m...@apollinemike.com> writes:

> One idea I've been a fan of for a long time is some type of aux file
> system in LilyPond.  That is, if we can come up with a file format
> that stores loads of data from previous runs of a score and then can
> somehow compare it to a parsed file, it could cut compilation time
> down by about 1/5 for stuff like changing B to B-flat in the Mahler's
> 9th.  I say 1/5 because the line breaking would need to be redone,
> which means everything afterwards needs to be redone, but the
> interpretation stage could likely be cut down.

The interpretation stage does not take 80%.  If you want to speed it up
significantly, work on the input system.  LilyPond spends most of its
time IIRC in the routine reading a single character, because parser and
Scheme read routines are more or less working independently and are
exercised in parallel all the time.  Stuff in lexer.ll like

        for (int i = 0; i < n; i++)
        {
                yyinput ();
        }
        char_count_stack_.back () += n;

does not exactly look like the height of good design.  There are also
things like

<chords,notes,figures>{RESTNAME}        {
        char const *s = YYText ();
        yylval.scm = scm_from_locale_string (s);
        return RESTNAME;
}

where a new string is getting allocated for every rest.  There is a lot
of potential for streamlining stuff before one caches it.

-- 
David Kastrup


_______________________________________________
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel

Reply via email to