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 ? ? ?
grmtools CFG in grammar library ? ? ? ?
lalrpop LR(1) in grammar build script &str No Yes No
lelwel LL(1) in grammar build script &str Yes Yes No
logos lexer in source proc macro &str, &[u8] ? ? ?
nom combinators in source library &str, &[u8], custom No Yes Yes
parol LL(k)/LALR(R) in grammar build script &str No ? No
peg PEG in grammar proc macro (block) &str, &[T], custom Yes Yes No
pest PEG external proc macro (file) &str Yes No No
winnow combinators in source library &str, &[T], custom No Yes Yes
yap combinators in source library &str, &[T], custom No Yes ?

Formerly, we compared:

  • pom: lack of notoriety

Results

Name Overhead (release) Build (debug) Parse (release) Downloads Version
null 0 KiB 196ms 4ms - -
grmtools 2,573 KiB 12s 167ms Download count v0.13.10
chumsky 297 KiB 4s 85ms Download count v0.10.0
combine 184 KiB 4s 47ms Download count v3.8.1
lalrpop 1,526 KiB 12s 37ms Download count v0.22.1
lelwel 152 KiB 4s 10ms Download count v0.7.1
logos 90 KiB 5s 20ms Download count v0.15.0
nom 98 KiB 3s 59ms Download count v8.0.0
parol 1,718 KiB 14s 262ms Download count v3.0.1
peg 85 KiB 2s 21ms Download count v0.8.5
pest 128 KiB 4s 64ms Download count v2.8.0
serde_json 55 KiB 3s 14ms Download count v1.0.140
winnow 79 KiB 2s 27ms Download count v0.7.4
yap 65 KiB 447ms 31ms Download count v0.12.0

System: Linux 5.4.0-170-generic (x86_64), rustc 1.85.1 (4eb161250 2025-03-15) 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%