m4rw3r / chomp

A fast monadic-style parser combinator designed to work on stable Rust.
Apache License 2.0
243 stars 19 forks source link

Simplified error #41

Closed m4rw3r closed 8 years ago

m4rw3r commented 8 years ago

Fixes #15 and #23

Does seem to have some pretty decent performance-improvements in general when comparing to master (293994c7bc8b1cdd0f9ab13b9295f6438422d0e9) using verbose_error:

This branch (317f2ca5312ec69c83c55bf5b6ae11b920901139):

     Running target/release/combinators-2e7b66495b16e58a

running 6 tests
test count_vec_10k ... bench:      12,994 ns/iter (+/- 333)
test count_vec_1k  ... bench:       1,361 ns/iter (+/- 69)
test many1_vec_10k ... bench:      23,901 ns/iter (+/- 10,821)
test many1_vec_1k  ... bench:       2,792 ns/iter (+/- 286)
test many_vec_10k  ... bench:      21,778 ns/iter (+/- 6,702)
test many_vec_1k   ... bench:       2,449 ns/iter (+/- 183)

test result: ok. 0 passed; 0 failed; 0 ignored; 6 measured

     Running target/release/http_bench-0586c66d0d734e56

running 4 tests
test multiple_requests      ... bench:      51,415 ns/iter (+/- 13,400)
test single_request         ... bench:         707 ns/iter (+/- 47)
test single_request_large   ... bench:       1,122 ns/iter (+/- 114)
test single_request_minimal ... bench:         131 ns/iter (+/- 12)

test result: ok. 0 passed; 0 failed; 0 ignored; 4 measured

master using verbose_error:

     Running target/release/combinators-2e7b66495b16e58a

running 6 tests
test count_vec_10k ... bench:     132,497 ns/iter (+/- 2,177)
test count_vec_1k  ... bench:      13,558 ns/iter (+/- 913)
test many1_vec_10k ... bench:     133,911 ns/iter (+/- 21,261)
test many1_vec_1k  ... bench:      13,912 ns/iter (+/- 3,692)
test many_vec_10k  ... bench:     131,241 ns/iter (+/- 15,787)
test many_vec_1k   ... bench:      13,609 ns/iter (+/- 1,336)

test result: ok. 0 passed; 0 failed; 0 ignored; 6 measured

     Running target/release/http_bench-0586c66d0d734e56

running 4 tests
test multiple_requests      ... bench:      62,534 ns/iter (+/- 1,925)
test single_request         ... bench:         888 ns/iter (+/- 165)
test single_request_large   ... bench:       1,324 ns/iter (+/- 662)
test single_request_minimal ... bench:         180 ns/iter (+/- 14)

test result: ok. 0 passed; 0 failed; 0 ignored; 4 measured

Seems like the tight loops in the combinators benchmark are especially improved by this change (probably since parsers::Error does not need a Drop implementation).

m4rw3r commented 8 years ago

Does still not match the performance of the noop error, it will probably be worth keeping as a feature for really performance-intensive stuff (and they usually are fine with an error offset only I believe).

m4rw3r commented 8 years ago

The compiletest_rs crate is broken on current nightly.

coveralls commented 6 years ago

Coverage Status

Coverage decreased (-0.2%) to 96.188% when pulling 001215e8cf7cace2869eb143c4c8e76d3474e2d6 on simplified_error into 293994c7bc8b1cdd0f9ab13b9295f6438422d0e9 on master.