Skip to content

Fix stack safety of alt and bind #178

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Apr 3, 2022

Conversation

natefaubion
Copy link
Contributor

Description of the change
This fixes the stack safety issues we saw when enabling non Rec versions of combinators.


Checklist:

  • Added the change to the changelog's "Unreleased" section with a link to this PR and your username
  • Linked any existing issues or proposals that this pull request should close
  • Updated or added relevant documentation in the README and/or documentation directory
  • Added a test for the contribution (if applicable)

@jamesdbrock jamesdbrock merged commit 4ccd3cd into purescript-contrib:main Apr 3, 2022
@jamesdbrock
Copy link
Member

digit 10000

runParser many digit 10000
mean   = 11.92 ms
stddev = 8.77 ms
min    = 8.13 ms
max    = 68.76 ms
runParser manyRec digit 10000
mean   = 6.44 ms
stddev = 2.64 ms
min    = 4.74 ms
max    = 17.86 ms
runParser Array.many digit 10000
mean   = 66.80 ms
stddev = 8.36 ms
min    = 61.16 ms
max    = 92.57 ms
StringParser manyRec CodePoints.anyDigit 10000
mean   = 6.87 ms
stddev = 4.35 ms
min    = 4.67 ms
max    = 20.36 ms
StringParser manyRec CodeUnits.anyDigit 10000
mean   = 5.12 ms
stddev = 682.77 μs
min    = 4.59 ms
max    = 11.12 ms
Regex.match \d* 10000
mean   = 333.81 μs
stddev = 129.71 μs
min    = 287.95 μs
max    = 1.61 ms

string 100000

runParser many string
mean   = 24.94 ms
stddev = 7.41 ms
min    = 19.45 ms
max    = 61.19 ms
runParser manyRec string
mean   = 17.44 ms
stddev = 7.80 ms
min    = 13.54 ms
max    = 56.47 ms
Regex.match literal*
mean   = 427.70 μs
stddev = 112.90 μs
min    = 392.50 μs
max    = 1.75 ms

sepBy 1000

runParser sepBy 1000
mean   = 739.72 μs
stddev = 550.86 μs
min    = 441.20 μs
max    = 3.49 ms
runParser sepByRec 1000
mean   = 527.18 μs
stddev = 83.44 μs
min    = 467.92 μs
max    = 827.69 μs

sepBy 10000

runParser sepBy 10000
mean   = 15.69 ms
stddev = 6.07 ms
min    = 8.31 ms
max    = 41.05 ms
runParser sepByRec 10000
mean   = 5.79 ms
stddev = 1.32 ms
min    = 4.89 ms
max    = 14.00 ms

chainl 10000

runParser chainl 10000
mean   = 12.21 ms
stddev = 4.51 ms
min    = 7.52 ms
max    = 38.50 ms
runParser chainlRec 10000
mean   = 5.02 ms
stddev = 574.70 μs
min    = 4.62 ms
max    = 8.45 ms

chainr 1000

runParser chainr 1000
mean   = 1.62 ms
stddev = 925.76 μs
min    = 855.54 μs
max    = 3.20 ms
runParser chainrRec 1000
mean   = 8.32 ms
stddev = 2.02 ms
min    = 6.10 ms
max    = 10.68 ms

chainr 10000

runParser chainr 10000
mean   = 27.45 ms
stddev = 2.29 ms
min    = 23.96 ms
max    = 29.49 ms
runParser chainrRec 10000
mean   = 636.22 ms
stddev = 17.40 ms
min    = 615.52 ms
max    = 652.92 ms

manyTill 1000

runParser manyTill 1000
mean   = 1.19 ms
stddev = 501.74 μs
min    = 888.52 μs
max    = 3.93 ms
runParser manyTillRec 1000
mean   = 936.46 μs
stddev = 314.19 μs
min    = 752.89 μs
max    = 2.08 ms
runParser manyTill_ 1000
mean   = 1.03 ms
stddev = 200.75 μs
min    = 863.92 μs
max    = 1.54 ms
runParser manyTillRec_ 1000
mean   = 893.61 μs
stddev = 178.43 μs
min    = 755.49 μs
max    = 1.60 ms

manyTill 10000

runParser manyTill 10000
mean   = 15.92 ms
stddev = 5.86 ms
min    = 12.55 ms
max    = 44.27 ms
runParser manyTillRec 10000
mean   = 8.66 ms
stddev = 592.86 μs
min    = 8.01 ms
max    = 11.68 ms
runParser manyTill_ 10000
mean   = 15.20 ms
stddev = 4.77 ms
min    = 12.48 ms
max    = 47.68 ms
runParser manyTillRec_ 10000
mean   = 8.84 ms
stddev = 393.46 μs
min    = 8.39 ms
max    = 10.89 ms

mediumJson

runParser json mediumJson
mean   = 3.99 ms
stddev = 1.91 ms
min    = 3.13 ms
max    = 34.28 ms
runTrampoline runParser json mediumJson
mean   = 3.88 ms
stddev = 1.36 ms
min    = 3.14 ms
max    = 29.89 ms
StringParser.runParser json mediumJson
mean   = 7.33 ms
stddev = 1.18 ms
min    = 6.67 ms
max    = 36.80 ms

largeJson

runParser json largeJson
mean   = 14.23 ms
stddev = 6.20 ms
min    = 12.10 ms
max    = 61.33 ms
runTrampoline runParser json largeJson
mean   = 13.67 ms
stddev = 3.25 ms
min    = 12.28 ms
max    = 43.87 ms
StringParser.runParser json largeJson
mean   = 25.90 ms
stddev = 1.46 ms
min    = 24.29 ms
max    = 36.81 ms

@jamesdbrock jamesdbrock mentioned this pull request Apr 5, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Development

Successfully merging this pull request may close these issues.

2 participants