with the following goals: • Compatibility - must match CRuby semantics exactly in order to merge • Maintainability - must be as maintainable as possible
with the following goals: • Compatibility - must match CRuby semantics exactly in order to merge • Maintainability - must be as maintainable as possible • Error tolerance - must be able to recover from errors and continue parsing
with the following goals: • Compatibility - must match CRuby semantics exactly in order to merge • Maintainability - must be as maintainable as possible • Error tolerance - must be able to recover from errors and continue parsing • Portability - must be able to be run from any ruby platform
with the following goals: • Compatibility - must match CRuby semantics exactly in order to merge • Maintainability - must be as maintainable as possible • Error tolerance - must be able to recover from errors and continue parsing • Portability - must be able to be run from any ruby platform • Performance - must be as fast and memory e ffi cient as possible
First call with CRuby team YARP fi rst commit Tru ff l eRuby fi rst commit JRuby fi rst commit CRuby fi rst commit Syntax Tree fi rst commit Parser fi rst commit 👶
First call with CRuby team YARP fi rst commit Tru ff l eRuby fi rst commit JRuby fi rst commit CRuby fi rst commit Syntax Tree fi rst commit Parser fi rst commit Rename to prism 👶
terminators • Regular expressions - required because of named capture groups • Encoding support - required to properly fi nd string-like terminators • Heredocs - very complicated semantics, can be almost anywhere in source
Snapshot testing - protect from regressions, check parser structure • Brute-force testing - all escape sequences in all contexts • Fuzzing - random input, check for crashes
Snapshot testing - protect from regressions, check parser structure • Brute-force testing - all escape sequences in all contexts • Fuzzing - random input, check for crashes • Grammar-based fuzzing - random input, check for crashes and parse errors
• Performance enhancements (SIMD instructions, arena allocation, etc.) • Multi-version support • Further integrations into the ecosystem • Improved Ruby library for external tools
• Performance enhancements (SIMD instructions, arena allocation, etc.) • Multi-version support • Further integrations into the ecosystem • Improved Ruby library for external tools • Contributor community around a single tool