[PoC] Experimental Rust parser + benchmark #5196
Closed
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Ever since Aaron Patterson published his "Ruby outperforms C" article, I was curious about how Rust based parser would fare in this comparison. To satisfy my curiosity I wrote a gem that's yet another implementation of GraphQL parser.
There are 3 parts to this PR:
The parser gem is a thin wrapper over graphql-parser crate. It first parses the input string to Rust structure, and then recursively traverses said structure to build
ruby-graphql
's AST. Note that this is a proof-of-concept, not production-ready code. Also note that's not the fastest Rust GraphQL parser out there, e.g. Stellate claims to be over 8x faster. It does offer a nice speed gain though (run one2-standard-2
VM in Google Cloud):Whether this speed gain is worth adding another language to the project is up for debate. Parsing is rarely the bottleneck, but I imagine in a large deployment a faster parser can translate to some savings. Anyway, I've spent significant amount of time on this, so I thought I'd share the effects.
@rmosolgo FYI.