549 Commits
Author SHA1 Message Date
TermiNexus bf4bab093a fix(hotspot): 深度栈改用 common linkage,修复跨模块 self 记账漏扣
症状:--hotspot-sites 下跨模块调用链的调用方 self 约等于 inc(子调用 inc 未被扣除),而同模块链正常,导致所有基于 self 的结论带偏差(实测 _translate_module_level 421.9e9/422.0e9、translate_children 164.5e9/164.9e9 等)。

根因:__fhs_tdepth/__fhs_tstart/__fhs_tchild 原为 internal linkage,Projectrans 多模块模式下每个 .vp 翻译单元各持一份独立深度栈;跨模块调用时被调方读到的深度为 0,slot=0,ret 时 slot>0 判定为假,其 inc 永远写不到调用方的 tchild[slot-1],于是调用方 self = inc - 0 = inc。

修复:三件套改 common linkage,由链接器合并为全程序唯一一份(与本仓库多模块同名全局的既有做法一致);__fhs_tscratch 与每函数计数器仍保持 internal。已用逐指令 Python 模拟验证:同模块各形态均正确、跨模块独立栈必然漏扣、共享栈后全部正确。

仅 --hotspot-sites 启用时生效,未启用路径逐字节不变。旧的 hotspot_time.txt 在跨模块链上的 self 列不可信,需重新测量。
2026-09-14 14:35:17 +08:00
TermiNexus 136e9bc33e feat(hotspot): 热点日志在进程退出时也落盘(atexit + 幂等守卫)
此前 --hotspot-sites 仅由 SetConsoleCtrlHandler 在 Ctrl+C 时落盘,导致正常退出与 fail-fast(VLogger.error 走 sys.exit(1),底层是 extern exit() 即 libc exit)都拿不到热点数据。

现把两个 handler 主体抽为 void() 落盘函数(__fhs_dump_sites/__fhs_dump_time),新增 __fhs_dump_all 与每模块 internal i32 __fhs_dumped 幂等守卫,并在 ctor/main 入口同时注册 SetConsoleCtrlHandler 与 atexit;Ctrl+C 处理器仍返回 FALSE(0) 保持原有终止行为。同模块只落盘一次,不产生重复段。

覆盖:正常 return、sys.exit(1) fail-fast、Ctrl+C。不覆盖(已在报告中列明):_exit、abort、崩溃信号、被强杀。不启用开关时 IR 逐字节不变;两个输出文件格式与排序不变。
2026-09-14 14:08:55 +08:00
TermiNexus 84d91d53e5 perf(hotspot): 计时串行化并改为自身耗时(exclusive)统计
--hotspot-sites 的每函数计时原为裸 rdtsc 的 inclusive 耗时,导致 _parse_* 一条调用链各项数值几乎相同、无法定位自身成本,且短函数测量不可信。

新增 _EmitReadTimestamp:x86_64 用 lfence 加 readcyclecounter 串行化读(业界通行的 lfence;rdtsc),非 x86_64 编译期降级为裸 readcyclecounter;入口与每个 ret 前共用。选 intrinsic 组合而非内联汇编,避免约束串转义与渲染风险。

用深度栈实现自身耗时:全局 __fhs_tdepth 与 [512 x i64] __fhs_tstart/__fhs_tchild,self = inc 减去本帧内被插桩子调用 inc 之和;递归靠每调用独立 slot 与深度索引天然正确;深度溢出或终结指令非 ret 的块明确跳过不记账(仅计进入次数),不伪造数值。入口段用 select 而非条件分支,避免改动 CFG。

hotspot_time.txt 行为 函数名 self inc 进入次数(仍按 self 降序),段头注明单位 tick 与 self 口径;hotspot_sites.txt 格式保持不变;帮助文本同步更新。未插桩的被调方(含 libc)耗时计入调用者 self,属该方法固有性质并已注明。
2026-09-14 13:42:14 +08:00
TermiNexus fc5a6134ca feat(hotspot)!: 下线 --func-hotspot 并为 --hotspot-sites 增加每函数计时器
移除 --func-hotspot 全链路(CLI 解析与绑定、Config argparse 与注入、Translator 属性、LlvmGenerator 收口与透传、BaseGen 专属实现、Phase2Translator 透传、帮助文本);全仓已无 FuncHotspot/func-hotspot 残留引用。

通用截断逻辑保留并改名为 _InstallHotspotTruncate,供 --hotspot-sites 使用(分别清空 hotspot_sites.txt 与 hotspot_time.txt);ctor 注册改为直接新建并接收处理器列表(sites 与 time 两个处理器在同一 ctor 内注册)。

--hotspot-sites 现附带每函数计时:入口读一次 @llvm.readcyclecounter() 存起始 tick,在函数所有 ret 之前再读一次并累加差值到 internal i64 __fhs_ftime_N,同时 __fhs_ftime_enter_N 记录进入次数;单位为 tick(x86_64 即 CPU 周期),语义为 inclusive(包含内层调用)。

计时结果按耗时降序写入同目录 hotspot_time.txt(# time <module_sha1> 分段 + 函数名/累计 tick/进入次数),不改变 hotspot_sites.txt 的既有格式与字段。不传 --hotspot-sites 时零影响。
2026-09-14 13:10:06 +08:00
TermiNexus 2021c0edb7 feat(hotspot): 新增 --hotspot-sites 逐调用点计数并带源码 file:line
为匹配白名单的直接 call 点插桩 internal i64 __fhs_site_<K>(call 前 +1),计数天然包含循环内放大的真实执行次数,可把热点定位到具体调用点。

新增 --hotspot-callees 覆盖白名单、--hotspot-sites-all 全量;按去 16 位 sha1 前缀后的基名匹配。Ctrl+C 落盘独立文件 hotspot_sites.txt(# sites 分段,含调用方/被调方/计数/源码位置),按计数降序;不破坏既有 hotspot.txt 格式。

在 AST->IR 生成期由 _HotspotSiteBuilder 为每条新生成的 call 指令轻量挂载 _src_file/_src_line,插桩时作为可选尾字段输出;取不到则留空不伪造。开关关闭时改用原生 ir.IRBuilder,零影响。
2026-09-13 23:29:32 +08:00
TermiNexus 0ffaadc95e fix(tpc): 注解侧泛型基名方向判定,阻止裸泛型 RHS 覆盖已特化注解类型
HandleAnnAssign 原无条件以 RHS.pointee 重建 alloca,会把注解已解析出的 Base[...] 特化类型覆盖成裸泛型基类,导致后续 .get() 按错误元素类型分派(list[int].get 返回 i32)后 inttoptr 截断。新增注解侧泛型基名结构性识别,仅拦此方向错误。
2026-09-13 17:50:02 +08:00
TermiNexus 5680592f37 feat(tpc): 新增 --func-hotspot 函数热点统计,Ctrl+C 时落盘
启用后为每个函数定义生成 internal i64 计数器并在入口递增;各模块 Ctrl+C 处理器以追加方式写最终文件(含 main 的模块启动时清空一次),经 llvm.global_ctors 自注册;未传参数时零影响。
2026-09-13 17:50:01 +08:00
TermiNexus 355811d64e chore(tpc): 移除属性链/调用分派错误路径的临时诊断打点
- HandlesBase: 删除 _AttrFailDiag 现场诊断(含模块别名链逐跳 dump),恢复精简错误信息

- HandlesExprAttr: 删除 [CHAIN-DBG] stderr 打点与 [attr-diag]/[attr-diag-nested] KeyError 包装

- HandlesExprCall: 删除 Unknown module 异常的 _rc_note 诊断后缀
2026-09-12 12:50:35 +08:00
TermiNexus ed3355202a fix(tpc): Mod.Var 链属性访问补第四条类回退(直读 var_/global_struct_class) 2026-09-12 12:42:59 +08:00
TermiNexus 015fbf17cf fix(tpc): 跨模块模块级变量类登记与 Mod.Var.Field 链解析;并停止跟踪 __pycache__/*.pyc 2026-09-12 11:51:42 +08:00
TermiNexus 9257dd841f fix(tpc): rowptr[X] 字段 element_class 登记补短名模糊扫描,修 Unknown module 误报 2026-09-12 11:24:49 +08:00
TermiNexus cc2f5d34eb feat(tpc): includes 只认项目配置;ASan 改为显式链接 clang64 运行库
includes 目录不再回退仓库硬编码 TransPyCRoot/includes:Phase2Translator 新增 PROJECT_INCLUDE_DIRS(INCLUDE_DIRS 置空以兼容旧引用),Config.py 从 project.vpj 的 includes 同步;HandlesImports 的模块搜索、TypeAnnotationResolver._builtins_include_dirs 一律只读项目目录。

ASan:mingw64 clang 没有 x86_64-w64-windows-gnu 目标的 ASan runtime,新增 _FindAsanRuntimeDir 定位 clang64 运行库并按 -l: 显式链接(asan_dynamic-x86_64.dll.a + runtime_thunk),定位失败即报错退出。HandlesExprFormat:i32 不再写 'l' 长度修饰符(LP64 下 printf 会按 64 位读实参)。
2026-09-11 22:47:21 +08:00
TermiNexus ab3873b038 加了忘记加的东西 2026-09-09 14:46:41 +08:00
TermiNexus a433f79f54 基线重置,TransPyC 不再作为直接脚手架主仓库 2026-09-09 14:44:44 +08:00
TermiNexus 7ab8bef3b5 perf(vipersimd): add/mul 数组内核 ×8 双缓冲(32 doubles/大迭代)压榨访存口 2026-09-09 10:38:39 +08:00
TermiNexus e5d91ae497 chore(repo): 解除剩余 Test/*/.tpv_build 构建缓存追踪(.gitignore 已忽略) 2026-09-09 08:57:03 +08:00
TermiNexus 0bfbcdd028 fix(memhub): MEMDBG 改为运行期开关 _memdbg_enable,BuddyTest 入口关闭 2026-09-09 08:55:49 +08:00
TermiNexus 4a8d8f34c0 fix(llvmfunc): T2 窥孔槽 load 超过 64 记录上限时放弃转发,避免删 def 留悬空 use 2026-09-09 08:55:48 +08:00
TermiNexus 8e2d5b227c chore(repo): 清理并忽略构建缓存与 PROF 性能产物,避免提交临时文件 2026-09-08 20:47:36 +08:00
TermiNexus 0bda395ecc fix(translator,peephole): TPC 属性链解析修复与窥孔 T1-T3 收尾
- TPC(lib/core): 泛型父特化形参按声明类登记 var_struct_class; _find_struct_key 键归一支持方括号内嵌 sha 前缀; 字段探测失败不再冒泡 FuncGen fail-fast; cast 局部通用指针槽按静态类 bitcast; 属性解析失败附诊断
- 窥孔(includes/llvmlite/__function.vp): 窥孔移至 Renumber 前使输出 SSA 编号连续; T3 no-op bitcast 消除; T4(数组 bitcast->GEP)验证干扰返回类型收敛已移除
- 附调试打点与 1.log
2026-09-08 12:52:48 +08:00
TermiNexus 76d1ee6076 fix(compiler,peephole): TPC 属性链解析与窥孔输出瘦身
- TPC(lib/core): 任意级属性链按链前向类解析恢复 stub 退化字段; cast 局部 rowptr[X] 登记回填; 通用指针槽按静态类名 bitcast 兜底; 赋值 RHS 求值失败 fail-fast 防未初始化变量; 报错行按源码文本锚定并附 ATTR-DIAG 现场
- 窥孔(includes/llvmlite/__function.vp): 成员访问单级链模式; 窥孔移至 Renumber 前使 SSA 编号连续; T3 no-op bitcast 消除; 替换缓冲按最坏上界分配
- __builder/__module/string.vp 配套; 清理 Test 构建产物与 PROF 杂项
2026-09-08 11:02:37 +08:00
TermiNexus 45e78ad107 基线重置,修复了一些 bug 2026-09-07 14:46:02 +08:00
TermiNexus b02bedae9a fix(link): 为 weak/linkonce 函数与全局补 COMDAT,修复 COFF 下跨模块重复符号
COFF 下无 COMDAT 的 weak/linkonce 定义会被 llc 展开成强符号 .weak.<name>.default(weak external 实现副本)。rowptr 新一代 includes 让泛型特化(list[rowptr[AST]].__before_init__)与跨模块共享常量(PYI_BUF_SIZE)在多个模块重复定义 → ld.lld duplicate symbol。

在 Phase2Translator 三处 dso_local 后处理簇后调用 _AddWeakComdat:函数定义补 ' comdat'、全局补 ', comdat'(置于 align/section 前),并在模块头加 comdat any 声明。llc/ld.lld 端到端已验证(双 obj 同符号链接无重复报错)。
2026-09-05 12:02:48 +08:00
TermiNexus cb8eef3316 fix(ViperQtProject): 主题切换同步应用 QPalette(修浅色勾选框缺失/深色框缺失) 2026-09-03 11:42:28 +08:00
TermiNexus ebaa939800 revert(ViperQtProject): 复选框回归纯原生渲染(移除 indicator 边框实验) 2026-09-03 11:38:09 +08:00
TermiNexus 7bf80350d7 feat(ViperQtProject): 原生指示器仅改边框色(不设背景/图标) 尝试保留对勾 2026-09-03 11:36:41 +08:00
TermiNexus 921a247fe5 feat(ViperQtProject): 对勾图标改 base64 data URI 内嵌(免运行时文件) 2026-09-03 11:34:49 +08:00
TermiNexus 07f16ae1a6 fix(ViperQtProject): indicator 加透明占位背景使 QSS 接管图标绘制 2026-09-03 11:33:31 +08:00
TermiNexus b12873d513 feat(ViperQtProject): 复选框改用灰框/蓝勾 PNG 指示器(QUrl 标准路径) 2026-09-03 11:30:54 +08:00
TermiNexus 3d98670b74 revert(ViperQtProject): 复选框指示器恢复原生对勾渲染,移除自定义图标 2026-09-03 11:28:46 +08:00
TermiNexus 93a0babde6 feat(ViperQtProject): 复选框指示器改用对勾图标(灰框/蓝勾 PNG) 2026-09-03 11:25:11 +08:00
TermiNexus 503d23fc1a fix(ViperQtProject): 浅色主题复选框黑色边框、补界面集成方式等小节标题重刷 2026-09-03 11:19:31 +08:00
TermiNexus 07a3ad10fe feat(ViperQtProject): 右上角新增深色/浅色主题切换 2026-09-03 11:16:55 +08:00
TermiNexus 7c85fa8ac0 feat(ViperQtProject): 许可协议逐份同意、树形组件占满高度、移除点击复选框展开 2026-09-03 11:06:35 +08:00
TermiNexus a5463a71f8 feat(ViperQtProject): 安装向导扩展与深色主题优化 2026-09-03 11:01:54 +08:00
TermiNexus a6151350de test(ViperBTests): 新增 ViperZipfileProject(zipfile 写->读回->CRC 损坏检测) 2026-09-03 09:35:12 +08:00
TermiNexus 64a527c615 feat(ViperBTests): ViperRequestsTest 大文件切片下载验证步骤
demo 新增第 6 步:httpbin /bytes/1048576 串行(1线程)与并行(4线程)下载后大小与内容逐字节比对一致
2026-09-03 08:27:58 +08:00
TermiNexus ac3e235406 feat(requests): 新增大文件切片下载(requests.download,串行+多线程 Range)
- download.vp: Content-Range 探测总大小,threads=1 串行切片 / threads>1 按带并行(≤8 线程),按偏移 Win32 落盘,http/https 按 scheme 分发,切片内跟随重定向
- requests/__init__.vp: 新增原始头/Content-Length/Content-Range 解析 helper 与线程安全 _DlOnce(Range 原语,全 stdlib 分配,不碰 _mbuddy)
- requests/https.vp: 镜像 _DlOnce(openssl + verify/ca/SNI/主机名校验)
2026-09-03 08:27:52 +08:00
TermiNexus 503dcaf568 fix(zlib): 修复动态块码长 RLE 尾部丢码与 gzip 头 FLG 偏移读取
- zdeflate: count_cl_freqs/write_cl_encoded 非零码长重复段尾部 1~2 个相同值不再被 i+=run 静默跳过,改由外层按字面量编码,保证码长总数恰为 HLIT+HDIST
- zinflate: gzip 头 FLG 改读偏移 3(input_pos-7),此前误读 MTIME[0] 导致真实 gzip(mtime 非 0)解析错位
2026-09-03 08:27:41 +08:00
TermiNexus dee1e19c62 feat(ViperOpenSSLProject): 以模板新建 OpenSSL FFI 测试工程(版本+摘要 demo,链接目标待定) 2026-09-02 16:19:23 +08:00
TermiNexus ab068df348 feat(ViperQtProject): 安装向导完善(许可协议/磁盘统计/安装日志/安装选项)
- 新增许可协议步骤:协议文本 + 勾选接受后才可继续
- 组件选择页:磁盘占用实时统计 + 安装选项(快捷方式/PATH/桌面图标)
- 安装进度页:阶段文案 + 实时日志输出(QPlainTextEdit)
- 安装按钮点击后禁用防重复,完成页汇总安装信息
2026-09-02 10:01:44 +08:00
TermiNexus 74624b1d0a feat(ViperQtProject): VS Installer 风格安装向导演示
- 四步骤:欢迎 → 组件选择 → 安装进度(QTimer 模拟)→ 完成
- 左导航高亮 + QStackedWidget 页面切换,深色主题 QSS
- 组件复选 + 计数摘要,安装路径浏览(QFileDialog),完成页汇总
2026-09-02 09:26:23 +08:00
TermiNexus fe0f9e5857 test(vqt6): 扩展功能测试(布局 + 信号槽回调 + QTimer 自动退出)
- QMainWindow + 中央控件 + 垂直/水平布局
- 按钮/复选框/输入框/下拉框/滑块/数值框/进度条/日志区
- 信号槽回调:clicked/toggled/currentIndexChanged/valueChanged/timeout 均触发 Viper 回调
- QTimer 3 次 tick 后自动退出,验证回调链路
2026-09-02 09:16:42 +08:00
TermiNexus f0a8999a6c feat(vqt6): 新增 ViperQtProject Qt6 Hello World 测试工程
- project.vpj: 静态链接 libvqt6_bridge.a,链接 Qt6.11.2 MinGW 动态库(Core/Gui/Widgets/Network)
- App/main.vp: QApplication + QWidget + QLabel + QPushButton 测试,FFI 摆放子控件几何
2026-09-02 08:53:37 +08:00
TermiNexus 49631ccf9b feat(linker): TPC 支持 project.vpj linker.dynamic_libs 动态链接 .dll/.so(解析为绝对路径,作为链接输入文件) 2026-09-01 22:01:18 +08:00
TermiNexus af432b445a feat(fltk): ViperFLProject 链接 libfltk_theme.a + Theme 按钮演示(base/Dark/Metro 主题切换) 2026-09-01 21:53:26 +08:00
TermiNexus 67b52777bd feat(fltk): main2 演示风格切换(Style 按钮循环 base/plastic/gtk+/gleam/oxy,状态栏 f-string 显示当前风格) 2026-09-01 21:31:12 +08:00
TermiNexus e529264c79 feat(fltk): ViperFLProject 回调 + 控件演示(按钮/复选框/滑块/输入/菜单/Spinner/Browser/Tree/Terminal + 定时器) 2026-09-01 21:23:24 +08:00
TermiNexus 7c8dd5f501 fix(fltk): gen_ffi 无名 C 类型参数修复(Fl_color_average 参数名重复)+ ViperFLProject 补齐 FLTK Windows 系统库(gdiplus/advapi32/shell32/ws2_32/user32/winspool) 2026-09-01 21:08:17 +08:00
TermiNexus 5ba5fb5ff3 fix(linker): include 模块自动扫描支持 .no_autobuild 标记与构建目录排除
- _scan_dir_for_libs:模块目录含 .no_autobuild 时跳过 C 源编译与库文件自动发现

- 递归时跳过 build/cmake-build*/.git/__pycache__/. 开头目录

- 防止 fltk 等内嵌完整第三方源码的 include 模块被误编译
2026-09-01 20:16:34 +08:00