Skip to content

zesterer/parse-rosetta-rs

 
 

Repository files navigation

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 combinators 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 combinators in source library &str ? ? ?
winnow combinators in source library &str, &[T], custom No Yes Yes
yap combinators in source library &str, &[T], custom No Yes ?

Results

Name Overhead (release) Build (debug) Parse (release) Downloads Version
null 0 KiB 227ms 24ms - -
chumsky 672 KiB 7s 1s Download count v0.3.0
combine 223 KiB 4s 880ms Download count v3.8.1
lalrpop 1,607 KiB 12s 2s Download count v0.20.0
nom 141 KiB 2s 932ms Download count v7.1.3
peg 27 KiB 2s invalid Download count v0.8.1
pest 157 KiB 4s 844ms Download count v2.7.3
pom 187 KiB 2s 2s Download count v3.3.0
winnow 121 KiB 2s 729ms Download count v0.5.15
yap 89 KiB 479ms 765ms Download count v0.10.0

System: Linux 5.4.0-124-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

About

Comparing parser APIs

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 100.0%