# 性能复核表（生成物，DO NOT EDIT MANUALLY）—— **面四：性能读数面**
#
# 口径（**正式数字只取此档**）：`--target native --release`（debug 档慢 4.6×，不作结论；见 `src/bench/README.md`）。
#
# 生成命令（**必须原样复跑**；同命令 + 同档位 + 同机 ⇒ 比较体应得同一张表）：
#   cd src/ttl
#   moon run src/bench/nquads-benchmark --target native --release src/bench/test_10000.nq
#   moon test --target native --release src/gen_nquads -f "*词法役 P1*"
#
# 判据（与覆盖率面**同族但本质不同**）：性能读数**有抖动、且随机型变化** ⇒ 本表的**比较体只放
#   机器无关的相对判据**（同机同命令下的序关系 + 量级带）；**绝对读数只作留证**（见下 `#` 注释），
#   **不参与 CI 逐字节比对**。判据两条：① 比较体同命令重生成**逐字节可复现**；② 相对判据**全为 true**。
#   （实证：同日三次跑总耗时 7.14 / 8.36 / 7.83 ms 抖动 ±15%，而五条相对判据三次全 true。）
#
# 读数纪律（**可复用两条**，每役沿用）：
#   ① **噪声下不交叠才下结论**（§AP.15 立）：本机噪声带宽 ±5–10% ⇒ 改前改后读数必须
#     **交错 A/B 受控对**（A、B 块交替跑），**带不交叠才判真变动**；带交叠 = 机噪 > 效应，
#     如实记"无结论"（禁硬编差距）。
#   ② **探针协议不同 ⇒ 读数不可同笔比较**（§AP.19 勘误立）：跨役对比只在**同探针**
#     （同 harness / 同复取协议 / 同统计口径）下才有效；开役基线必须用与刀后**同一探针**
#     交错测得，历史异协议数字（冷跑单发、不同复读取数形）只作留证，**不作基线、不入比较**。
#
# 覆盖边界（**必写**；`const.md` §6.5.7）：本面**不覆盖**
#   ① **其它机型 / 其它规模**的绝对吞吐（机器相关，跨机不可比）；
#   ② 与 Jena / Oxigraph / rdflib 的**对拍**（语义强度不同——C 只行级扫、三家建图、
#      我们深验四门 + 物化不建图；README「口径第二条」）；
#   ③ **棘轮**（历史对比）：时间维度由基线管，与复核面**不可互替**（§6.5.6）。
#
# 留证读数（[本机留证 2026-09-22]，**单次、机器/负载敏感，只作展示**）：
#   ・P3 物化扁平化后：10k 分段（µs）词法 1839 · 引擎 3125 · 验证 5733 · 物化 1320；总 ≈6.87 ms ⇒ **1.46M quads/s**
#     （P3 = materialize_quad 消 4 层 helper + Result 往返；读数证物化已分配主导=产物类型本质，
#      0.8ms 目标需 QuadEmit 枚举→扁平 struct 产物模型翻案，跨包同源大手术）
#     （P2 刀 1 = engine loop 热路径零分配；剖析：词法 1402 / 适配+loop ~1080 / FSM 净 ~527–700）
#   ・P1 验证段提速后：词法 1922 · 引擎 3435 · 验证 5834 · 物化 1394；总 ≈7.23 ms ⇒ 1.38M quads/s
#     （P1 = `validate_iri` 256 项字节类表 + 热循环 unsafe 读 + graph 视图去重；四门净开销剖析 1624 → 988 µs）
#   ・P1 改造前（同日）：词法 1756 · 引擎 3319 · 验证 6284 · 物化 1500，总 ≈7.83 ms（1.28M/s）；
#     另两次总 7.14（1.40M/s）/ 8.36 ms（1.20M/s）——**判据全过**（相对判据抗抖动的实证）
#   ・词法对照（同机 release）：`Lexermoon` **35.87M tok/s** vs `Lexerc`(C FFI) **15.06M** ⇒ 原 C-T12 口径的反证
#
# 沿革：2026-09-23 §AP.9 重估（条件③语义主线完成）本机复核——**比较体 5/5 true 不变**（判据面）；
#   留证读数：总 **7.334 ms / 1.364M quads/s** · 验证 5845µs · 物化 1489µs · 词法 1723µs/29.02M tok/s
#   （Lexerc 12.55M ⇒ 2.31×）——绝对值只作留证（面四口径：绝对读数不进比较体）。

# 沿革：2026-09-23 P4 词法第一刀（字节类表 `lexer_cls` + `unsafe_get`）——词法电池 10k **1723 → 1572µs**
#   （29.02 → **31.80M tok/s**，−8.8%）；总留证 **7.334 → 6.979 ms**（1.364 → **1.433M quads/s**）；
#   判据体 5/5 true 不变（面四口径：绝对读数不进比较体）。

# 沿革：2026-09-23 P4 第二刀（IRI/PrefName 热循环：`self.pos` 局部化 + `unsafe_get` + 类表终止位）——
#   词法电池 10k **1572 → 1329µs**（37.63M tok/s；**累计 1723 → 1329 = −22.9%**）；
#   总留证 **6.979 → 6.137 ms**（**1.630M quads/s**，越过判据线 1.5M ⇒ 叙事升级候选）；
#   判据体仍 5/5 true（绝对读数不进比较体）。

# ===== 叙事口径升级（2026-09-23，用户拍"判据越过就打"）=====
# 判据触发：§AP.10 立的"越过 1.5M triples/s 才谈叙事升级"⇒ P4 两刀后 **1.630M** 越过。
# **本面判据体不变**（升级的是叙事口径，不是判据）：比较体仍 5/5 true，绝对读数仍只作留证。
# 单一声明源（**三处引用同此**）：本文件（面四）+ 下列复现条件。
# 【实测】口径 = `--target native --release` · 10k 语料（`src/bench/test_10000.nq`）：
#   总 **6.137 ms** ⇒ **1.630M triples/s** ⇒ **0.000614 ms/三元**（词法电池同机 37.63M tok/s）。
# 【对端】Oxigraph **公开读数** 0.0020 ms/三元（`README.md` 对比表；**500k 语料 / 异机 / 语义面不同**：
#   其建图，本实现解析 + 四门深验 + 物化不建图）⇒ **同量纲换算 ≈3.3×（量级参照，非逐项对拍）**。
# 【勘误】旧账面"与 Oxigraph 5–6×"是**预估投影**（3.4× 基线 × 1.6–2× 提速预估），**非实测**；
#   自本笔起对外只声称上面这条 3.3× 量级参照。
# 【复现条件】① target = **native + release**（debug 慢 4.6×，不作结论）；② 冷缓存口径 =
#   **净检出**（CI「复核面·性能」步天然冷）；本机留证为同会话热口径，跨机不可比；
#   ③ 命令：`moon run src/bench/nquads-benchmark --target native --release src/bench/test_10000.nq`
#     与 `moon test --target native --release src/gen_nquads -f "*词法役 P1*"`；
#   ④ 机器指纹（本机留证）：**AMD Ryzen 7 5700G · 16 CPU · WSL2 Linux 6.6.87.2 x86_64 · moon 0.1.20260920**。

# 沿革：2026-09-23 P4 第三刀（`utf8_name_advance` 三处 ASCII 门外提 + 字面量三环/
#   后缀/数值扫描局部化，逐字节同义）——
#   词法电池 10k **1298 → 1195µs**（交错 A/B 三轮受控对：前 1255–1367 / 后 1181–1211，
#   带不交 ⇒ −8% 真实；41.8M tok/s；**累计 1723 → 1195 = −30.6%**）；
#   bench 总 6.05–6.99 ms 带（改前改后交叠 = 机噪 > 预期收益 ~−1.5%〔词法占端到端 ~19%〕，
#   无结论即如实记）；
#   判据体仍 5/5 true（绝对读数不进比较体）。覆盖率 10176/11206 = **908‰ 保持**（面三同笔）。

# 沿革：2026-09-23 **P2 刀 a)**（扫描器直产 NQuadsEvent：Token→Event 双装箱拆除，
#   −50k 装箱/10k 行；Unknown span 走 last_unknown 单槽旁路供 trig/n3v2 适配层）——
#   A 引擎全链 2520–2730 → **2074–2256µs**（两冷跑 ×3 复读、battery 交错；降 ~400µs = 适配溢价大部）；
#   F 适配净（直产后 = EOF 滤哨 + 零转换透传）1673–1691 → **1287–1350µs**；
#   E FSM 净 480–530 → 487–581µs（带交叠 = 未动，裁决面干净）；
#   词法电池 10k 1195 → **1114µs**（44.9M tok/s；**口径变更**：月侧直产事件，
#   电池断言改事件分母，与旧 Token 序列不逐字同分母——P2 起另起带，比值列仅参考）；
#   bench 千行 0.000614 → **0.000565 ms/三元**（同笔；对外叙事仍 §AP.13 钉的 ≈3.3×，
#   新读数是否推高对外口径留用户裁）；
#   判据体仍 5/5 true（绝对读数不进比较体）。覆盖率 10191/11216 = **908‰ 保持**（面三同笔）。

# 沿革：2026-09-24 **P3 产物模型**（QuadEmit 平化挂字段：Subject/Object/GraphName
#   三词项枚举拆为 TermKind 8 常量臂（含 DefaultGraph 单例）+ 逐位 kind/view 直挂，
#   1 箱/quad——词项枚举箱 −3；ArrayView[Byte] 为 core `#builtin.valtype`，
#   切片/赋值零箱；图位封闭门新增运行时拒臂 + 负控）——
#   物化段探针（本役立 `p3_probe_wbtest`：10k named，native release，5 复读取稳态）：
#   刀前稳态 **293–368µs** → 刀后 **214–300µs**（交错 A/B 两轮、方向一致，
#   稳态中位 ~296 → ~230µs ≈ **−23%**）；
#   【勘误】开役基线 1399/1543µs（§AP.19）系另一探针协议冷跑数，与本探针**不可同笔比较**
#   （教训入探针件头注：同探针交错 A/B 才是有效对比）；
#   判据体仍 5/5 true（绝对读数不进比较体）。覆盖率面三同笔（见 coverage-review 沿革）。

[段序判据（10k / native release）]
验证 > 引擎 = true
引擎 > 物化 = true
验证 > 词法 = true
[档位与词法判据]
吞吐 > 0.5M quads/s = true
词法(Lexermoon) > C-FFI(Lexerc) = true
# 沿革：2026-09-25 **性能对拍复测**（发版前口径复核）——
#   本机指纹：Linux x86_64 · AMD Ryzen 7 5700G（16 核）· 冷缓存（`moon clean` 后首跑）· `--target native --release`：
#   10k 档总 **5.696619 ms / 1.755M quads/s ⇒ 0.0005697 ms/三元**；1k 档总 **0.559771 ms / 1.786M ⇒ 0.0005598 ms/三元**。
#   **比值复算**（对端仍为公开读数 0.0020 ms/三元，非同机 / 非同语义面）：0.0020 ÷ 0.0005697 ≈ **3.5×**
#   **对端同口径实测（本笔补：装 `oxigraph-cli` 0.5.11 + 最小 Rust 探针 `RdfParser::from_format(NQuads)`，
#   只量解析、不建库、不含进程启动；同机同档同文件、3 复读取稳态最优）**：
#   10k **7.6891 ms ⇒ 0.0007689 ms/三元 · 1.30M quads/s**（quads=10000 ✓）；1k **0.7722 ms ⇒ 0.0007722**。
#   ⇒ **实测比值 = 0.0007689 ÷ 0.0005697 ≈ 1.35×**（1k 档 1.38×）——**且对端只解析，本实现含四门深验 + 物化**。
#   【口径改写】旧叙事"≈3.3×/3.5×"基于**公开读数 0.0020 ms/三元**（500k 语料 / 异机 / 其建图）；
#   本机实测对端比该公开读数**快 2.6×** ⇒ 该公开读数**不作对端代表值**，对外口径改按本次实测写。
#   README 表行（MoonTTL 0.56 ms / Oxigraph 0.77 ms）与对端句同笔刷新。判据体未动（本段属 `#` 注释，不进 CI 比对）。
# 沿革：2026-09-25 **建库面（补记，同笔）**——`oxigraph load`（**落盘建库**，RocksDB，同机同档，每复读**新建库**）：
#   10k **1981 / 480 / 397 ms**（rep1 冷盘，稳态 ≈ 0.40–0.48 s）· 1k **253 / 248 / 249 ms**
#   （固定建库开销 ≈ 0.2 s 占主）。**逐次 `GRAPH` 计数验真：quads = 10000 / 1000 ✓**（严格档，未用 `--lenient`）。
#   **读法**：对端此面 = 解析 + **持久化建库**；本实现全链 **5.7 ms / 10k** 但**不建库**（不落盘、无索引）
#   ⇒ **两条不同作业，不作倍数比较，只作量级参照**（差值主要来自落盘建库的固定开销 + 边际写放大）。
#   【自查两记】① 我首用的 `load <file>`（位置参）是**参数错误路径**（须 `--file`），读数作废；
#   ② 其后"库里 0 条 ⇒ 严格档拒了语料"是**我的查询写错**——SPARQL `{?s ?p ?o}` **只匹配默认图**，
#   而本语料全在**命名图**里；改 `GRAPH ?g { ?s ?p ?o }` 即得 10000 ✓。**对端严格档并未拒收**（提示文本只是建议）。
# 沿革：2026-09-25 **B2 Light 档省幅**（wbtest 探针，n3v2）——合成 10000 行 turtle、同进程交替 A/B、5 轮、
#   只量 `parse_all + materialize_all`（不含建库/进程启动）；机指纹同前（Ryzen 7 5700G · native release）：
#   复跑① deep 最优 **5.238 ms** vs light 最高 **4.975 ms** ⇒ 带不交叠 ⇒ 省幅 **−21.5%**；
#   复跑② deep 最优 **4.931 ms** vs light 最高 **4.378 ms** ⇒ 带不交叠 ⇒ 省幅 **−18.8%**。
#   ⇒ **n3v2 Light 省幅 ≈19–21%（取严 ≈19%）**；nquads 侧同法早前测得 −12.5%。
#   trig 侧探针**本轮未落**（`TrigMaterializer::new` 构造形待勘）⇒ 记缺口，不估值。
# 沿革：2026-09-25 **B2 Light 省幅·trig 补数**（wbtest 探针，同协议：合成 10000 行 · 同进程交替 A/B · 5 轮 · 只量 parse+materialize）：
#   deep 五轮 5.432672 / 4.831683 / 4.870349 / 5.314217 / 4.962545（最优 **4.831683**）
#   light 五轮 3.831147 / 4.950387 / 3.872842 / 4.054577 / 3.808719（最高 **4.950387**）
#   ⇒ deep 最低 4.8317 **<** light 最高 4.9504 ⇒ **带交叠** ⇒ 严格按判据：**无结论**。
#   离群观察（只记不算）：light 第二轮 4.9504 明显离群（其余四轮 3.8087–4.0546），若剔离群则与 deep 最低
#   4.8317 **完全不交叠**（提示 ~20% 量级）——但**不入账为结论**，待复跑判明（**禁**用"剔离群"当判据）。
#   三方言现状：n3v2 ≈19–21%（两复跑不交叠 ✓）· nquads 12.5%（不交叠 ✓）· **trig 无结论（交叠）**。
# 沿革：2026-09-25 **trig 复跑判明**（承上一条"无结论"）——同协议再跑两次：
#   复跑#1 deep 最优 4.84211 vs light 最高 4.387932 ⇒ **不交叠** ⇒ 省幅 18.5%；
#   复跑#2 deep 最优 4.859319 vs light 最高 4.255998 ⇒ **不交叠** ⇒ 省幅 20.9%。
#   ⇒ 首轮那记交叠确认为 **light 第二轮离群**（4.9504，其余四轮 3.81–4.05）；**结论成立：trig ≈19–21%**，
#   与 n3v2 同档；首轮交叠**保留留痕**（不删），标注"离群、后两次判带不交叠"。
#   三方言：n3v2 19–21%（两复跑）· trig 19–21%（两次判明 + 首轮留痕）· nquads 12.5%。
# 沿革：2026-09-25 **B2 分段拆解**（解释三方言省幅差异）——10k · native release · **单次**读数（分段的判据：只作结构性解释，**不作省幅结论**）：
#   n3v2 deep 解析 3.603 ms / 物化 2.206 ms（物化占 38%）；light 解析 3.252 / 物化 1.304（29%）
#   trig deep 解析 3.163 / 物化 2.048（39%）；light 解析 2.758 / 物化 1.101（29%）
#   nquads（现成 bench 段口径）引擎 2.280 / 物化 0.855（14%）
#   ⇒ Light 砍物化段 **n3v2 −41% / trig −46%**；且 n3v2/trig 物化段占比（38–39%）远高于 nquads（14%）
#   ⇒ **收益差异 = 深验所在段占比差异**（读数支持，非推测）；解析段也降（−10%/−13%）= 组装层轻验那一半被关。
