TermiNexus
ac0d0f2cc8
perf(tpc): _MemberSlotAccepts 身份短路 + _generate_structs 热路径局部化(profile 第二梯队)
依据 PROF/main_prof_10152.prof(tottime 2288.9s / 72 文件顺序翻译):
_generate_structs 自身 268.6s cum 1893.2s 15762 基本/35240 总调用
└ 子调用:_TryLoadStructFromStub 1589.5s×418k、_MemberSlotAccepts 61.1s×54.2M
isinstance 39.7s×300M、PointerType 构造 68.7s×15.9M、
SymbolTable.lookup 16.7s×15.9M、__len__ 6.8s×15.9M
本次两处(均等价改写):
1. StructGen._MemberSlotAccepts:在 `Declared == Slot or str(Declared) == str(Slot)`
之前加**身份短路** `Declared is Slot`。该函数被 _generate_structs 调 54.2M 次,
其中 llvmlite `Type.__eq__` 合计 ~30s(types.py:178/303/550/720)+
`str()` ~3.3s;同一对象(body 与 class_members 引用同一类型对象)是其常见形态。
2. StructGen._generate_structs:把 `self.SymbolTable` / `.lookup` 提升为函数级局部
(真值语义逐字保持:SymbolTable 定义了 __len__,故先取 `bool(_symtab)`),
消掉逐类重复的属性查找与 15.9M 次 `__len__`。
说明:本提交只做等价微优化;本函数的大头(35,240 次全量 O(类数×成员数) 扫描、
429k 次结构体 stub 加载、1407 次泛型特化整类发射)需要结构性改动,另行评估。
2026-09-29 14:41:48 +08:00
..
2026-07-18 19:25:40 +08:00
2026-09-29 13:50:44 +08:00
2026-09-17 14:52:37 +08:00
2026-09-28 15:10:39 +08:00
2026-09-29 13:00:11 +08:00
2026-09-26 19:27:22 +08:00
2026-09-28 23:32:23 +08:00
2026-09-29 14:41:48 +08:00
2026-09-26 19:27:22 +08:00
2026-07-18 19:25:40 +08:00