3 ms·
Ohm is very impressive. Specifically: 1. The separation of Grammar and Semantics. 2. Handling left recursion in a top down (peg) parser. 3. Incremental
by bd82 9y ago
Ohm is very impressive.
Specifically:
1. The separation of Grammar and Semantics.
2. Handling left recursion in a top down (peg) parser.
3. Incremental parsing.
I think that the one feature missing to make it applicable
for more than rapid prototyping and teaching purposes is
performance.
In this benchmark I've authored:
http://sap.github.io/chevrotain/performance/ http://sap.github.io/chevrotain/performance/
Which uses the simple JSON grammar it is about two orders of magnitudes slower than most other parsing libraries in JavaScript.
So I am sure there is a great deal of room for optimizations.
- pdubroy 9y agoThanks! Yes, we are aware that Ohm's batch parsing performance is not great. In practice, it has been fast enough for our uses -- especially since we implemented incremental parsing. With incremental parsing, Ohm's ES5 parser can be as fast as hand-optimized parsers like Acorn. But you're right, there is definitely room for improvement. So far, we have been much more concerned with making Ohm easy to learn and pleasant to use. I would certainly be happy to have contributors who are interested in improving our batch performance.
- bd82 9y agoIncremental parsing is indeed amazing for IDE scenarios. But you still have to parse the entire file at least once. For example it takes 15 seconds to parse lodash.js with Ohm (on my machine) using the sample EcmaScript grammar. But what happens if my IDE has 200 files and 400KLOC of code? From my personal experience, if you want high performance you have to treat it as an ongoing feature, this could mean: * Inspect each new version for performance regressions. * Reinspect previous feature implementations for possible performance optimizations. * keep track of underlying performance characteristics of your runtime, for example V8 hidden class changes and other de-optimization causes. These characteristics may (and do!) change over time with newer releases of V8... It would be interesting to try and optimize Ohm.js I even contributed some optimizations to Nearley.js in the past. But I'm afraid I just don't know when I will get around to trying this with too many projects and ideas competing for my time. :(