From c37039f121b934bdac872633d140fde27f89d57b Mon Sep 17 00:00:00 2001
From: tannevaled
Date: Sat, 26 Sep 2026 14:47:37 +0200
Subject: [PATCH] landing: v0.4.0, the measured corpus figure, and parse speed
stated honestly
- The site named v0.2.0 (2026-09-21) in three places. The real latest tag is v0.4.0,
cut 2026-09-26; main is exactly that tag.
- "every one of the 68 files in the pinned ruby/spec language/ corpus now parses" was
right in substance but wrong in its count: the pinned corpus has 80 _spec.rb files
under language/, and go-ruby-parser parses all 80. Measured here by calling
parser.Parse on each.
- Added a second completeness figure a reader can check: of 47 top-level CRuby 4.0.5
stdlib files MRI accepts, this parser accepts 46.
- Added parse speed, because the repository README's figures did not reproduce. On 46
real stdlib files both engines accept: ~1.9x quicker than Ripper.sexp, and about
1.6x slower than CRuby's own C parser. The landing page previously said nothing
about speed, and the README's claim to beat the C parser is corrected in its own PR.
Co-Authored-By: Claude Opus 5
---
hugo.toml | 2 +-
layouts/index.html | 13 ++++++++-----
2 files changed, 9 insertions(+), 6 deletions(-)
diff --git a/hugo.toml b/hugo.toml
index 12098fa..87ea77c 100644
--- a/hugo.toml
+++ b/hugo.toml
@@ -9,4 +9,4 @@ disableKinds = ["taxonomy", "term", "RSS", "sitemap", "404"]
name = "parser"
url = "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/go-ruby-parser/parser"
status = "ready"
- blurb = "The front-end: `parser.Parse(src) (*ast.Program, error)`, with sub-packages `token`, `ast` and `lexer`. A stateful lexer (MRI `spaceSeen` semantics), a recursive-descent + Pratt expression parser with a scope stack, and a typed AST for a broad, practical subset of **Ruby 4.0** — literals, operators, control flow, `case`/`in` **pattern matching**, methods/blocks, classes/modules/metaprogramming. 100% covered (the gate runs on all three OS lanes; the suite also runs on all six 64-bit targets and on js/wasm and wasip1/wasm), differential-tested against MRI Ruby 4.0.5. Current release **v0.2.0** (2026-09-21): fourteen grammar gaps closed, and every one of the 68 files in the pinned ruby/spec `language/` corpus now parses."
+ blurb = "The front-end: `parser.Parse(src) (*ast.Program, error)`, with sub-packages `token`, `ast` and `lexer`. A stateful lexer (MRI `spaceSeen` semantics), a recursive-descent + Pratt expression parser with a scope stack, and a typed AST for a broad, practical subset of **Ruby 4.0** — literals, operators, control flow, `case`/`in` **pattern matching**, methods/blocks, classes/modules/metaprogramming. 100% covered (the gate runs on all three OS lanes; the suite also runs on all six 64-bit targets and on js/wasm and wasip1/wasm), differential-tested against MRI Ruby 4.0.5. Current release **v0.4.0** (2026-09-26): all 80 `_spec.rb` files in the pinned ruby/spec `language/` corpus parse, and the three limitations the docs used to list — paren-less command calls with keyword/splat/block args, default block parameters, and the positional `Class(a)` find-pattern — all parse now. `BEGIN { }` / `END { }` remain the one refusal."
diff --git a/layouts/index.html b/layouts/index.html
index 8ccc59e..f867939 100644
--- a/layouts/index.html
+++ b/layouts/index.html
@@ -88,7 +88,7 @@ go-ruby-parser
stateful lexer
recursive-descent + Pratt
typed AST
- v0.2.0 · 2026-09-21
+ v0.4.0 · 2026-09-26
Ruby 4.0 subset
pattern matching
heredocs
@@ -119,10 +119,13 @@ go-ruby-parser
100% coverage is enforced in CI on all three OS lanes, and the suite also runs
on all six 64-bit targets — amd64 and arm64 natively, riscv64 / loong64 /
ppc64le / s390x under QEMU — plus js/wasm and wasip1/wasm.
- The current release is v0.2.0
- (2026-09-21), which closed fourteen grammar gaps: every one of the 68 files in the pinned
- ruby/spec language/ corpus now parses, thirteen of which had not parsed at all
- before.
+ The current release is v0.4.0
+ (2026-09-26). Measured on 2026-09-26: all 80 _spec.rb files in the
+ pinned ruby/spec language/ corpus parse, and of 47 top-level CRuby 4.0.5 stdlib
+ files MRI accepts, this parser accepts 46. On parse speed it is roughly
+ 1.9× quicker than Ripper.sexp and about
+ 1.6× slower than the C parser built into CRuby
+ (RubyVM::AbstractSyntaxTree.parse).
{{ range .Site.Params.repos }}