polish: 深覆盖收官后打磨轮(P1-P10)—— clippy 清零 + AOT 覆盖率 51/51 满额 - #20
Conversation
测试目标里的机械 lint 全清:11× clone-on-Copy(RuntimeVal)、 5× field_reassign_with_default(struct 初始化改写)、5× 手写 ±1 范围比较、3× items_after_test_module、其余单发。 check.yml clippy gate 加 --all-targets——-D warnings 盲区 (#17 两轮 CI 红皆此类)最后一角关闭。
map_native_error 不再包装 "native `{name}` failed: " 前缀:
native 函数失败与 error(v) 一等值对称,调用点归因由 traceback
承担。副产品:VM catch 文本与 lkrt raise_str 文本对齐一步。
semantics.md 新增「错误文本」裁决:跨后端错误文本仍不保证逐字
一致(VM 类型检查 vs native id 查找,如 recv(999) 两侧文本不同),
差分语料继续不打印 catch 文本。
既有 exec_tests 断言匹配的是测试自身 bail 文本,无需更新;
全量差分/fuzz 150 无涟漪。
macro_rules!(10 种 fragment + follow-set/重复深度定义期校验)· hygiene/$crate 锚 · 宏导入四形式(内建 macros 8 宏/文件/包/ 命名空间 m::vec!)· #[cfg]/#[derive(Debug|Show)] · 外部 provider (Lk.toml 配置/信任模型/依赖感知缓存,指向 packages.md)· lk macro expand 全 flags。示例经实测可跑;README ×2 特性段补链; 本地 CLAUDE.md 过时注记修正。
进程级 SelectGen{Mutex<u64>, Condvar}:send/recv/close/try_*/select
自身共 7 个状态变更点在 **drop 各自 channel 锁之后** bump 代数并
广播(无嵌套锁序,通知路径零 raise 点)。select 空手轮询后改等
代数变化,wait_timeout(1ms) 仅作丢失唤醒保险,不再是发现机制——
消掉 200µs 空转。轮询前读代数:轮询期间落地的变更使等待立即返回,
无窗口。新增跨线程唤醒功能单测(断言完成与载荷,不断言时序)。
差分 12/12 · workspace 0 · fuzz 150 · bench 见下
MODULE_TABLE(bare-global 白名单 + encoding/net 子模块标记)· MODULE_ABI(module.member → AbiRef/参数/返回,42 行带语义注释, 线性查找冷路径)· METHOD_TABLE(方法名四用途位:Dyn 拆箱 list/map、strlist lookahead、iter/stream 转发,20 行)。 新增 stdlib 成员从「改 5+ 处 match」变「加一行」;差异项 (slice 只进 strlist、reduce 不进 strlist 等)逐条保留原语义。 AbiRef::new 升 const fn(mir)。 纯重构:coverage 50/51 精确不变 · 差分 12/12 · fuzz 150 · workspace 0 · clippy/fmt/no_std 全零。
比较侧改逐字段引用比较,条件不变;快照 clone 保留为正确性锚。 generation-counter 方案裁决不做(~30 处 mutation site 漏 bump 一处 = false convergence = miscompile,收益当前无痛),注释留档。 coverage 50/51 不变 · 差分绿。
留档合集逐项啃完,四组通用机制(probe 驱动,非 workload 特化):
- **list + list concat**(spread `[0, ..[1,2], 3]` desugar):AddInt
加 list 臂——同型 typed 直连(新 f64/str_chain ABI ×2;ListStr
结果保引号 display),跨型/含 Dyn 走 dyn_chain(VM Mixed 裸文)。
- **位运算** `& | ~`(__lk_bit_and/or/not desugar):MIR IntBinOp
加 And/Or/Xor + codegen 三行;~x = xor -1;非 Int 实参 reject。
- **SetFieldK Dyn 臂**:`p.x += 9` 的 struct 字段回写(值 to_dyn_any
经 str_dyn_set)。
- **struct update** `P { ..p, x: 42 }`(__lk_merge_fields +
__lk_make_struct desugar):新 ABI str_dyn_merge(镜像 VM
merge_field_maps 两步插入序)+ str_dyn_rebuild(镜像 make_struct
的 fresh field copy,键迭代序 VM-exact);make_struct 挂 struct
provenance + trait 标记(J1 机制复用)。
- **force_dyn_globals 通用机制**:非 entry-prefix 初始化的全局被
函数读(fn inc(){counter+=1})→ 槽强制 Dyn(zeroinit {0,0} 恰是
nil tag,先读后写观察到 VM-exact 的 nil)——retriable discovery,
快照/budget 全接线。曾是「mutable 全局首版不做」的最后残留。
**"ha"*3 无需改动**(编译器常量折叠,probe 钉实)。
门禁:51/51 · 差分 12/12 · workspace 0 · fuzz 150 · -D warnings
all-features 0 · clippy --all-targets 0 · no_std 0 · bench 见下
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (32)
📜 Recent review details⏰ Context from checks skipped due to timeout. (3)
🧰 Additional context used🪛 LanguageTooldocs/semantics.md[grammar] ~126-~126: Ensure spelling is correct (QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1) docs/macros.md[grammar] ~114-~114: Ensure spelling is correct (QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1) [style] ~131-~131: Using many exclamation marks might seem excessive (in this case: 18 exclamation marks for a text that’s 2503 characters long) (EN_EXCESSIVE_EXCLAMATION) 🪛 markdownlint-cli2 (0.22.1)docs/semantics.md[warning] 123-123: Spaces inside code span elements (MD038, no-space-in-code) [warning] 123-123: Spaces inside code span elements (MD038, no-space-in-code) 🔇 Additional comments (40)
📝 WalkthroughWalkthrough本次打磨轮变更包括:CI clippy 检查扩展到 Changes打磨轮核心变更
Sequence Diagram(s)sequenceDiagram
participant SenderThread
participant lkrt_chan_send
participant notify_selects
participant lkrt_chan_select
participant SelectGen
lkrt_chan_select->>SelectGen: 读取当前 generation
lkrt_chan_select->>lkrt_chan_select: 轮询各 arm(无就绪,无 default)
lkrt_chan_select->>SelectGen: 阻塞等待 generation 变化
SenderThread->>lkrt_chan_send: 发送值到 channel
lkrt_chan_send->>notify_selects: 通知状态变化
notify_selects->>SelectGen: 递增 generation 并广播
SelectGen-->>lkrt_chan_select: 唤醒
lkrt_chan_select->>lkrt_chan_select: 重新轮询 arm,发现就绪
lkrt_chan_select-->>lkrt_chan_select: 返回接收到的值
Possibly related PRs
Comment |
概要
深覆盖大计划(PR #17)合并后的打磨轮,10 个子项(P1-P10),8 个 commit。
cb206f2— clippy--all-targets清零(36 条)+ CI gate 升级eed7a69— native raise 前缀统一:LK 层 catch 到的文本 = 裸 cause,消 "native ... failed:" 前缀分歧b878745— 宏系统用户文档docs/macros.md+ README 补链6be9fe5— select spin-poll → 代数 Condvar 唤醒9502796— lower 名单收拢为三张声明表,消 7 处硬编码同步点0894123— fixpoint 收敛比较消掉第二组 clonedb96798—unsupported.lk全翻转(list concat / 位运算 / SetFieldK Dyn / struct update 镜像 / force_dyn_globals),AOT 覆盖率 25/51 → 51/51 满额验证
--all-features+RUSTFLAGS=-D warnings)0 失败--all-targets0 · fmt 0scripts/aot_coverage.sh51/51,差分门禁逐字节全过细节台账见
progress.md「打磨轮」章节。Summary by CodeRabbit
New Features
select的唤醒机制,减少漏唤醒问题。Bug Fixes
Documentation