v0.20.0-rc3 — GLR fork reduction: C to parity
Pre-release
Pre-release
Third release candidate on the 0.20 line. Parser-core GLR performance wins bring C to/below parity with tree-sitter C on real corpus, plus parser correctness fixes and markdown grammargen advances. All changes byte-for-byte C-parity-verified; CI green (build, parity-cgo, perf-regression).
Performance — GLR fork reduction (#96)
Extended the RepetitionShiftConflictChoice resolver to collapse spurious reduce/shift forks where tree-sitter C resolves deterministically (verified per state against C's parser.c — the reduce is a zero-progress dead-end, no conflicts: entanglement).
- C:
translation_unit_repeat1(top-level list) +preproc_if_repeat1(preprocessor body) collapse —large__cluster.c20,866 → 1,099 GLR forks (−95%), ~−30% parse wall, bringing C to/below parity. - Rust: macro token-tree (
delim_token_tree_repeat1) continuation-token fork reduction. - Token source: O(1) valid-external-symbol fast path mirroring C's
external_lex_stateindexing. - Consolidated ring A/B (real corpus, n=8): geomean −6.62% — C −30%, java −11%, go −10%, no language regressed.
Fixed
- Race in deferred parent-link wiring (#95)
- Kotlin object declaration misparse (#94)
- grammargen:
html_blocktype 6/7 blank-line termination;link_reference_definitionsoft-break de-merge
Added
- grammargen: self-contained CommonMark §3–§6 markdown parity corpus
Full changelog: https://github.com/odvcencio/gotreesitter/blob/v0.20.0-rc3/CHANGELOG.md