/parse-rosetta-rs

Comparing parser APIs

Primary LanguagePythonMIT LicenseMIT

Rust Parsing Benchmarks

This repo tries to assess Rust parsing performance.

crate parser type action code integration input type precedence climbing parameterized rules streaming input
chumsky combinators in source library &str ? ? ?
combine combiantors in source library &str ? ? ?
lalrpop LR(1) in grammar build script &str No Yes No
nom combinators in source library &[u8], custom No Yes Yes
peg PEG in grammar proc macro (block) &str, &[T], custom Yes Yes No
pest PEG external proc macro (file) &str Yes No No
pom combiantors in source library &str ? ? ?
winnow combinators in source library &str, &[T], custom No Yes Yes

Results

Name Overhead (release) Build (debug) Parse (release) Downloads Version
null 0 KiB 391ms 22ms - -
chumsky 773 KiB 8s 1s Download count v0.1.5
combine 228 KiB 5s 867ms Download count v3.8.1
nom 161 KiB 2s 848ms Download count v7.1.3
peg 29 KiB 2s invalid Download count v0.8.1
pest 143 KiB 5s 757ms Download count v2.5.5
pom 215 KiB 890ms 2s Download count v3.2.0
winnow 143 KiB 2s 747ms Download count v0.3.0

System: Linux 5.4.0-104-generic (x86_64) w/ -j 8

Note:

  • For more "Parse (release)" comparisons, see parser_benchmarks
  • Parsers have not been validated and might have differing levels of quality (#5)

Running the Benchmarks

$ ./bench.py
$ ./format.py