Skip to content

deps: perex 0.1.12 (first-character BRANCH dispatch; emoji regex −37%) - #12224

Merged
proggeramlug merged 1 commit into
PerryTS:mainfrom
proggeramlug:perex-0-1-12
Oct 8, 2026
Merged

proggeramlug merged 1 commit into
PerryTS:mainfrom
proggeramlug:perex-0-1-12

Conversation

@proggeramlug

@proggeramlug proggeramlug commented Oct 8, 2026 •

Copy link
Copy Markdown
Contributor

Bumps perex to 0.1.12 (PerryTS/perex#4). Perry needs no code change.

What 0.1.12 does:

  • An alternative that cannot begin at the current character is skipped without pushing a backtracking frame. A new BRANCH instruction carries each alternative's first-character set; the set is derived from the compiled code and checked again on load.
  • Alternation is laid out flat.
  • Anchoring is decided at compile time, and a search clears only its capture registers.
  • The program format moves to 14.

Publish-age override: this is the owner-approved one-time override for 0.1.12 (2026-10-08). Cargo.lock was resolved once with CARGO_RESOLVER_INCOMPATIBLE_PUBLISH_AGE=allow. The lock pins checksum 86d57d56…fdc9eb, verified against crates.io, and cargo fetch --locked passes. The 7-day window itself is unchanged, and the Cargo.toml comment records all of this in the same form as 0.1.11's.

Measured in perry (instructions per op; CPUs 56-63 under the lock, setarch -R, n=5):

case 0.1.11 0.1.12 node
emoji .test(c) 3,396 2,123 (−37.5%) 242
ns.default().test(c) 3,865 2,593 (−32.9%) 307
/^\p{DI}$/u.test(c) 1,207 1,141 (−5.5%) 233
string-width per grapheme 15,161 13,825 (−8.8%) 2,381
emoji regex literal 747 747 14

Program set (instructions:u, n=5 interleaved):

  • commander −0.32%; fastify −0.18%; qs parse −0.18%.
  • tsc +0.010%; zod −0.002%; qs stringify +0.016%; hello −0.014%; effect −0.019%; buffer 0.000%; worker +0.046%.
  • Full-collection counts are identical, RSS deltas are all under 1%, and binaries grow by 4 KB.
  • All 10 outputs match node.

Tests:

  • Runtime regex/perex tests (release, --test-threads=1): 221/0 on both versions.
  • Test262 RegExp subset: 124 pass / 5 skip / 0 diff on both.
  • perex itself: 211 tests pass, and all 44 Node differential jobs (48,718 test262 cases) show 0 differences.

Summary by CodeRabbit

  • Performance
    • Text-pattern matching now skips alternatives that cannot begin with the current character, reducing unnecessary matching work in some cases. The reported improvements vary by expression and workload.

Owner-approved one-time publish-age override for 0.1.12 (2026-10-08); the
lock pins the crates.io checksum.
@coderabbitai

coderabbitai Bot commented Oct 8, 2026

Copy link
Copy Markdown

Review in Change Stack →

Note

Currently processing new changes in this PR. This may take a few minutes, please wait...

⚙️ Run configuration
  • Configuration used: defaults
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 38c4639d-9731-46d6-ba48-3c8d6f96a543
📥 Commits

Reviewing files that changed from the base of the PR and between a323a86 and aef37d7.

⛔ Files ignored due to path filters (1)
  • Cargo.lock is excluded by !**/*.lock
📒 Files selected for processing (2)
  • Cargo.toml
  • changelog.d/perex-0-1-12.md
 ___________________________________
< I like big bugs and I cannot lie. >
 -----------------------------------
  \
   \   (\__/)
       (•ㅅ•)
       /   づ
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create a new PR
  • Autopilot · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@proggeramlug
proggeramlug merged commit a70b376 into PerryTS:main Oct 8, 2026
93 of 101 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant