Files
TransPyC/lib
TermiNexus e292e2390d perf(Phase2Translator): 文本读缓存改按路径直存(零 stat),正确性靠写/删点显式失效
- _ReadTextCached 不再 os.stat:原实现每次调用都要 stat 判新旧,等于把省下的
  1.2 万次 open 换成 1.2 万次 stat(同为系统调用热点),命中路径仍有系统开销。
  改为 OrderedDict[路径 → 文本],命中零系统调用;newline 非 None 的逐字节读不进缓存。
- _InvalidateTextCache 改 O(1)(按路径直接 pop),并在 14 处文本写点 + 1 处 stale
  文件删除(os.remove)处调用 —— 读侧不再 stat 后,写/删点显式失效是唯一正确性保证。
- 失效为何必须显式(时间戳判据在同 tick 内会失效):_compile_one 前的 type 定义
  重排(行集合不变仅次序变,长度逐字节相同)、_recombine_ll 的旧 sha1 前缀替换
  (16 位 hex 等长替换)。
- 安全性前提:TPC 单次运行内被读文件内容不变。已核对:self.sig_files /
  self.stub_files 指向的都是 Phase1 产物(temp_dir / _GLOBAL_CACHE_DIR,Phase2
  期间不再改写);Phase2 自产的 .ll/.stub.ll/.deps.json/.vpi 每次写、删都走上面的失效。

基线 PROF/20260930_224857:_io.open 12,740 次/self 28.8s、read 11,902 次/30.4s、
TextIOWrapper.__exit__ 16.6s(128 个模块却上万次读,同一份产物被多阶段反复打开)。
2026-09-30 23:15:22 +08:00
..