P
Paul McGuire
I just ran my pyparsing unit tests with the latest Python 2.6b1
(labeled internally as Python 2.6a3 - ???), and the current 1.5.0
version of pyparsing runs with no warnings or regressions.
I was pleasantly surprised by the improved performance. The most
complex parser I have is the Verilog parser, and I have just under 300
sample input files, so the test gets a chance to run over a range of
code and source inputs. Here are the lines/second parsing for the
Verilog data (higher numbers are better):
Python V2.5.1 Python V2.6b1
base
209.2 307.0
with packrat optimization enabled
349.8 408.0
This is a huge percentage improvement, anywhere from 15-50%! I do not
know what it is about 2.6 that runs so much faster, but given that
packratting achieves somewhat less improvement, I would guess that the
2.6 performance comes from some optimization in making function calls,
or in GC of local variables when functions are completed (since
packratting is a form of internal memoization of parse expressions,
which thereby avoids duplicate calls to parsing functions).
Using psyco typically gives another 30-50% performance improvement,
but there is no psyco available for 2.6 yet, so I skipped those tests
for now.
-- Paul
(labeled internally as Python 2.6a3 - ???), and the current 1.5.0
version of pyparsing runs with no warnings or regressions.
I was pleasantly surprised by the improved performance. The most
complex parser I have is the Verilog parser, and I have just under 300
sample input files, so the test gets a chance to run over a range of
code and source inputs. Here are the lines/second parsing for the
Verilog data (higher numbers are better):
Python V2.5.1 Python V2.6b1
base
209.2 307.0
with packrat optimization enabled
349.8 408.0
This is a huge percentage improvement, anywhere from 15-50%! I do not
know what it is about 2.6 that runs so much faster, but given that
packratting achieves somewhat less improvement, I would guess that the
2.6 performance comes from some optimization in making function calls,
or in GC of local variables when functions are completed (since
packratting is a form of internal memoization of parse expressions,
which thereby avoids duplicate calls to parsing functions).
Using psyco typically gives another 30-50% performance improvement,
but there is no psyco available for 2.6 yet, so I skipped those tests
for now.
-- Paul