@hrg/gitignore 0.3.1 → 0.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/README.md +19 -8
  2. package/package.json +1 -1
package/README.md CHANGED
@@ -260,23 +260,23 @@ The three JS columns are **the same vectors, the same port, three matching strat
260
260
  which is a pattern with `**` where the regex happened to be fast. That row is the open tuning question, not a settled
261
261
  result.
262
262
 
263
- The Java port still runs the full DP (4397 ms total, `backtrack` 3205 ms, `anchored` and `doublestar` regressed against its
264
- regex version). The same hybrid applies to it and is the next step; the numbers above are why it should be measured per
265
- workload rather than by the total.
266
-
263
+ Both ports now run the same segment DP as the reference, with the ancestor memoisation that took them from 17x and 11x behind
264
+ Zig to about 1.6x and 2.2x at the time it was measured - and the reference has since become roughly 10x faster than it started,
265
+ so the relative gap moved again. The current numbers, the method, and every improvement (including what was measured and
266
+ refuted) are in [doc/performance/](doc/performance/README.md) and [doc/measurement.md](doc/measurement.md).
267
267
  ### How these numbers are produced
268
268
 
269
269
  Cold-process runs, with start-up measured separately and subtracted. That is the honest number for a CLI and it is
270
- also noisy: the same Java build has reported `backtrack` at 3205 ms and 5129 ms. [+doc/measurement.md](doc/measurement.md)](doc/measurement.md) records the two measurement modes, the steady-state table (12 rounds inside one process) and every
270
+ also noisy: the same Java build has reported `backtrack` at 3205 ms and 5129 ms. [doc/measurement.md](doc/measurement.md) records the two measurement modes, the steady-state table (12 rounds inside one process) and every
271
271
  strategy tried on the Java port with what it cost. The Java column above predates the literal-segment fast path.
272
272
 
273
273
  ### Two caveats
274
274
 
275
275
  - The runner measures a process; the start-up column is a subtraction, and on a loaded machine it is a noisy one. The
276
276
  large rows are far outside that noise; the small ones are not.
277
- - The ports are young. Their remaining distance to Zig is a design difference, not tuning: Java has not adopted the DP, and
278
- neither port has the Zig implementation's per-chain indexing.
279
-
277
+ - The ports are no longer "young" in the sense that mattered: the Java port adopted the segment DP, then literal segments, then
278
+ the ancestor memoisation, and the JS port did the same. What remains is the reference's own head start - it has three indexes
279
+ the ports do not have, and [doc/performance/shared.md](doc/performance/shared.md) is the list a new port should work through.
280
280
  ## Running the three
281
281
 
282
282
  ```text
@@ -379,3 +379,14 @@ Requirements, learned from a project of this author's that publishes this way (`
379
379
 
380
380
  Afterwards, `fs-meta` resolves `hr.hrg:gitignore` from the repository like any other artifact; it no longer needs the local
381
381
  `mvn install`.
382
+ ## Checks
383
+
384
+ ```text
385
+ bun scripts/check-verdicts.mjs # the three implementations agree, byte for byte
386
+ bun scripts/check-verdicts.mjs --json # one NDJSON object per workload
387
+ ```
388
+
389
+ The 34 conformance vectors say what the matcher must decide; this says that the three implementations decide the *same thing*
390
+ on the six bench workloads — 10,000 verdicts, compared byte for byte, with the first differing line named on failure. A missing
391
+ binary is exit 2 with the build command, never a skip. It exists because twice in this project's history "the vectors pass" was
392
+ mistaken for "the ports agree", and the comparison had been run by hand in scratch files that were never committed.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hrg/gitignore",
3
- "version": "0.3.1",
3
+ "version": "0.3.2",
4
4
  "description": "git's .gitignore (wildmatch) semantics: one matcher, shared by the Zig, JavaScript and Java ports.",
5
5
  "license": "LicenseRef-GPL-3.0-with-Commons-Clause",
6
6
  "author": "Davor Hrg",