Commit Graph
22 Commits
Author SHA1 Message Date
TermiNexus 18b9b8bfa8 perf(phase2): llc 编译改多线程异步并行
Phase B 主循环从'每文件同步跑 llc'改为'循环内写 .ll + 构造 LlcTask
(命令串 stdlib.malloc,避免主池 reset_to(mark2) 回收悬空),循环后
run_llc_parallel 分批发 LLC_MAX_THREADS(8) 个线程并发跑 llc,join 后
校验结果。worker 只调 stdlib.system(),不做任何池分配(MemBuddy 非线程
安全);ASan 模式 opt 插桩也在 worker 内并行。includes 编译路径与
单文件 run_pipeline 保持同步不变。
2026-08-19 07:28:08 +08:00
TermiNexus 2cb974ae5a refactor(handles): HandlesExprCall 拆 6 组(Base/Deref/Ctor/Call/Table/Handle,2041→241 行)
直接移动+改调用方:~100 个委托函数按功能移至 6 个子模块,主文件
保留 _g_gen/set_global_gen/顶层常量/4 个类(AsmOperand、FuncEntry、
FuncDefaultsEntry、ExprCallHandle——CallGenLeafKit/HandlesTranslator
仍以 HandlesExprCall.类名 引用)。
- 子模块函数体内 _g_gen/常量/类裸引用 → HandlesExprCall.xxx 跨模块访问
- 28 个调用方 HandlesExprCall.func( → 子模块前缀并补 import
- 全 App 语法/引用/import 验证通过
2026-08-17 08:10:55 +08:00
TermiNexus 278893d203 refactor(core): StubMerger 拆 5 组(Collect/Store/Topo/IR/Build,2391→72 行)
直接移动+改调用方模式:35 个函数按功能移至 5 个子模块,主文件
仅保留常量与全局变量(main.vp 仍直接赋值 StubMerger._mbuddy)。
- 子模块函数体内裸调用映射为子模块前缀,全局变量经 StubMerger._xxx 跨模块访问
- 12 个调用方文件 StubMerger.func( → 对应子模块前缀并补 import
- 全 App 语法/引用/import 验证通过
2026-08-17 08:03:40 +08:00
TermiNexus 593332636f 全部整理上传 2026-08-17 04:27:29 +08:00
TermiNexus 0a0e6d3bab perf(diag): OOM 二分定位诊断 + 主池提升 1.5GB
BuildPipeline/Phase2/StmtGenMixin/HandlesAnnAssign 增加 [MEM] 限频打印
(parse/translate 前后、Phase A 前后、stmt 行级、AnnAssign 入口),
定位 NewAstTest 翻译内存暴涨起点;主池 1.5GB(2^30+2^29 二进制分解),
给单文件峰值与 Phase A 高并发翻译留足余量。
2026-08-15 00:15:59 +08:00
TermiNexus 8d5dbeab89 feat: 引入 CompilerFactory 永久内存池,1a 每文件 reset 解 NewAstTest OOM
main 创建 512MB perm_pool(MemBuddy 第二实例,永不 reset)并注册
CompilerFactory 工厂(对齐 TPC Translator 装配模式,memhub 保持通用)。
各 Gen Mixin 跨 mark 持久表(struct/枚举/Renum/spec/vtable/全局函数/
闭包/函数指针/Cexport/Reexport/TraceFrames/Doc)全部迁移到 perm_pool,
替代 stdlib.malloc 深拷贝提升速度。

Phase1 1a 主循环(98 includes 全量 parse AST 驻留主 pool → 1GB 耗尽)
改为:StdlibAlloc=1 注册数据进 perm_pool + 每文件翻译完 reset_to(文件级
mark) 回收 AST;1b-pre vpi 预生成循环同样 reset_to(mark1)。同步修 7 处
reset 后悬空隐患:StructTable 表体、add_field DefaultVal、Renum 变体/
别名表内容、vtable full_names 内容、FuncptrRets 深拷贝。

CompilerFactory 类名与模块名同名(合法场景,TPC 已支持模块别名优先)。
2026-08-14 04:02:36 +08:00
TermiNexus 1145ef74c8 fix(phase1): import 依赖边改用局部映射副本,修复 ASan 崩溃
_TopoSortFiles 的 import 依赖边直接使用 GetSha1Store*Ptr() 返回值
(bytes|t.CPtr 联合)作为 str 参数传入 _FindSha1ByModName,跨函数
传参时指针异常(ASan: strcmp 读 0xffffffffffffffff)。改为先用
_BuildIncludesSha1Map 复制局部 bytes 数组(与 BFS 一致),Phase2 的
BuildTopoSortedIndices 调用同步修复。
2026-08-13 04:48:38 +08:00
TermiNexus 7cc501cdef fix(phaseb+): includes 按依赖拓扑序编译,修复跨模块 vtable 误杀
astaux.vp 继承 base.vp 的 AST 类时,vtable 槽位需 AST.accept 的
TypeStr 已注册到全局表(完整翻译产物)。Phase B+ 原先按 store 扫描
顺序编译,astaux 先于 base 编译 → 继承方法找不到实现被 fail-fast 误杀。
新增 StubMerger.BuildTopoSortedIndices(Kahn 逆拓扑,被依赖者先),
Phase B+ 循环按拓扑序编译可达 includes。
2026-08-13 03:50:59 +08:00
TermiNexus b4c01808bf fix(phasec): 可达模块 .obj 缺失误杀恢复,纯声明模块跳过
Phase B+ 对纯声明模块(text.ll 无 define 行,如 stdio.vp 全 pass)
按设计不生成 .obj,但 Phase C 遍历可达模块时无条件要求 .obj 存在,
导致误杀。新增 StubMerger.IsDeclOnlyModule 判断(与 Phase B+ 内联
逻辑一致),.obj 缺失时声明文件静默跳过,实现文件缺失仍 fail-fast。
2026-08-13 03:11:13 +08:00
TermiNexus 9d3483e97e refactor: 全面 fail-fast 化(去兜底)+ 泛型补译/解引用宽度修复
- 全量降级点改 fail-fast:23 文件约 140+ 处静默 i32/i8*/void/continue 兜底改为 HandlesType.fatal_error(python traceback 风格)或 VLogger.error 终止,暴露上游根因;保留语言语义默认(无注解 i32/infer 链/CIf/star 回退)
- 泛型特化 Phase B 补译 reemit 强制发射方法体(修复 list[...] define 缺失)
- c.Deref 读取宽度仅按赋值直接 RHS 推断(修复 CurAssignAnnot 残留误判 i32)
- 类型别名清理:t.CChar|t.CPtr→str、t.CInt→int 等
2026-08-13 02:11:49 +08:00
TermiNexus ea5b17f5fd refactor: 深度 if 守卫化重构(guard continue + 短路合并)
- HandlesAssign/Return/Match、StubMerger、Phase2、Gen/*Mixin、StubGen/* 手写 None 检查链改守卫/短路,全局最深 14→12、>=10 层 26→19
- StubMerger define→declare 剥 linkonce_odr 等 linkage(修复 VectorGenericTest invalid linkage)
- CallGenMixin len() 数组常量长度分支(对齐 TPC _HandleLenLlvm)
- print 参数翻译失败 (null) 兜底改 fail-fast
- 临时诊断日志与死代码(sub_vk)清理
2026-08-12 21:13:25 +08:00
TermiNexus 120a2d7ad7 fix(Phase2): Phase A 多遍重试修复同项目依赖翻译顺序
main.vp 先于其 import 的 mbuddytest.vp 翻译(文件系统顺序),跨模块函数返回类型精确解析因依赖 text.ll 未生成而 fail-fast。新增 Translator._deps_pending + text.ll 存在性探测区分依赖未翻译/真错误,Phase A 循环改多遍,依赖就绪后下遍重译命中。
2026-08-11 01:33:52 +08:00
TermiNexus 695699f01e fix(build): 统一 SHA1 口径消除符号前缀不一致(undefined reference)
- Phase2 App 源文件 SHA1 改用 IncludesScanner.compute_file_sha1(CRLF→LF 归一化), 与 StubMerger 对同一批文件口径一致; 此前用 Utils.compute_sha1(原始字节) 在 CRLF 文件上产生不同前缀
- compute_file_sha1 BUF_SIZE 128KB→1MB(与翻译侧 SRC_BUF_SIZE 一致), 消除大文件尾部变更不触发缓存失效
2026-08-09 22:54:32 +08:00
TermiNexus 60493d6ae5 fix(compiler): 支持多 includes 目录,修复 G4 g4node 未注册 SHA1
- Config.vp 解析 includes 数组全部元素为空格分隔 IncludesDirs(首元素仍存 IncludesDir 兼容单目录)

- IncludesScanner 逐目录递归扫描合并,FileEntry.IncDir 记录所属 includes 根目录

- StubMerger 存储新增 IncDir 并行数组(MAX_INC_DIR_LEN=512),容量 256→1024

- Phase2 预注册/3.5 按需编译改用逐条目 IncDir 拼接源路径(空串回退 includes_dir)

- HandlesImports import 未注册错误显示行内内容 + App 兄弟模块文件豁免

- 新增 TransPyV 自身 project.vpj
2026-08-08 10:31:44 +08:00
TermiNexus 96e045889e refactor: 提取 is_vp_or_py_at/JoinPath/read_file_to_buf 公共工具,消除 IncludesScanner/Phase2 重复代码 2026-08-08 00:02:39 +08:00
TermiNexus 89cc30c757 基本稳定 2026-08-07 19:32:46 +08:00
TermiNexus f440bda421 清理 __new__/__init__/add_argument 中的 [DBG-argparse] 运行时打印,
还原标准库为静默实现。
2026-08-06 21:21:41 +08:00
TermiNexus 8ad500c4da 基本稳定可以编译 Test 2026-08-05 20:12:08 +08:00
TermiNexus a3b9bdc409 修正了逻辑,使 TPV 可以编译 Test,但自举还有一段距离 2026-08-03 02:01:20 +08:00
TermiNexus 9dcf34599d 升级了仿 Python 错误堆栈提示,修复了 bool 不存在的问题,将 bool 改为 i1 而非 i8,实现了 bool 的归一化 2026-07-31 04:12:12 +08:00
TermiNexus bfb55d68f4 取消了 i8* == i8* 实际使用 strcmp 的规则,修复了诸多 Bug 2026-07-30 21:56:19 +08:00
TermiNexus d227bee139 将 .py 和 .pyi 后缀名改为了 .vp 和 .vpi 后缀名 2026-07-30 16:34:50 +08:00