Skip to content

v0.20.0-rc3 — GLR fork reduction: C to parity

Pre-release
Pre-release

Choose a tag to compare

@odvcencio odvcencio released this 30 May 05:26

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.c 20,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_state indexing.
  • 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_block type 6/7 blank-line termination; link_reference_definition soft-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