秉承在实践中学习在写项目中提高编程语言的综合能力的原则准备在复刻deepseek harness项目的过程中找到light的不足补足短板让light语言真正能够实战已经让hy3 模型先摸了摸底写了两篇文档 在目录 G:\dswork\duan-light-merge 一篇 复刻deepseek-harness难点分析.md 一篇 复刻harness驱动_light升级计划.md 。请你修正一下然后制定改进计划可以把欲改进的功能拆分成3-4个独立的任务我让其它AI agent也一起来帮我们完成任务hy3模型:用光明Light复刻 DeepSeek Harness难点分析v2 修正版修订说明v1 由 hy3 起草方向对但三处关键事实判错。v2 全部结论经源码实测复核逐条附文件:行号。 复核范围g:\dswork\duan-light-merge\light-merge光明 v7harness 侧沿用 v1 的G:\github\deepseek-harness盘点。路线口径已由用户拍定原生优先原生二进制承载 harness 是北极星转译路线仅作 MVP 保底。本文按该口径重排难度。0. 一句话结论v2真正的门槛不是消灭 PyObject*而是原生 runtime 一行网络代码都没有。src/llvm/runtime_typed.c4344 行已经有原生的 tagged value、list、dict、类、异常、协程调度器——原生复杂类型这一关已经过了。但它#include只有 stdio/stdlib/string/stdint/time/math/sys-stat/ctype/errnosrc/llvm/runtime_typed.c:13-31全文件epoll|kqueue|io_uring|pthread|CreateThread|WSA|sys/socket零匹配select|poll|O_NONBLOCK|FIONBIO也零匹配。一个 agent harness 的本质是「一根网络长连接 一堆子进程 一个事件循环把它们缝起来」。原生侧三者缺其二没有 socket没有 IO 多路复用。1. v1 的三处事实错误必须纠正错误 1「原生 list/dict 仍是PyObject*」—— 不成立c_backend.py:15-31确实有那张表但——PY_TYPE_TO_C在整个文件里没有任何引用点是死代码。实际生效的是_type_to_c()c_backend.py:156-181与_infer_type():506-509复合类型返回void**生成的 C 里没有#include Python.h运行时头见:34-38。更要紧的是c_backend.py根本不是原生主路线。它的链路是「光明 → Python 源码 →ast.parse→ C」:98-114、:619-693只支持 int/str/if/while/range-for/递归函数字典恒为{0}:268-269、in生成/* in */:310-311、Pow生成非法 C:287、无类无异常。它的 60 个测试tests/unit/test_c_backend.py733 行全是字符串断言没有一个真调 clang 编译运行。结论把c_backend.py:22-23当作原生 runtime 的 Python 依赖证据是找错了地方。这条 P0v1 的 U2「消灭 PyObject*」应当删除。错误 2「无自研事件循环」—— 一半不成立runtime_typed.c:4006起就是协程/异步分区已经有LightCoroutine:4027-4043、LightFuture:4045-4053LightScheduler{ run_queue, all_coros, num_coros }:4056-4063 全局单例g_scheduler:4063dv_scheduler_run()单线程取队首:4233-4243、dv_coro_await:4186、dv_coro_run_to_completion:4246恢复机制 Duffs device resume_point:4019上限DV_MAX_COROUTINES 256:4024也就是说协作式协程调度器已经有了。缺的是它右边那一半没有 IO 等待队列——协程只能靠主动 yield切换不能靠socket 可读唤醒。这才是准确的缺口描述。错误 3「light7 compile --native」—— 该命令不存在--c/--native只存在于light6.py:19-20, 324-329, 348-388而pyproject.toml:67-69的 console_scripts 只有light cli.light:main与lightc cli.lightc:main。安装后的用户拿不到light7命令。真正的原生入口是cli/light.py:1295-1298的compile --backend {antlr,src,llvm,llvm-typed}分派见:340-381与light pkg native --target:1348-1351。顺带两条同类问题--target wasmcli/light_unified.py:1056参数存在、实现缺失compile_with_src:365-407只特判llvmwasm/js全落入 else 分支静默生成.py。src/wasm_target.py577 行是 Pyodide 方案不产.wasm且除一个测试外无任何生产代码引用。两条 LLVM 路径并存src/llvm/主力真 IRcodegen.py974 行 codegen_typed.py3372 行与antlrparser/llvm_codegen.py旧i8* 字符串类型系统被不同 CLI 分别调用src/compiler.py:1510-1528走旧路径cli/light.py走新路径。根目录llvm_backend.py名不副实——它不生成 IR只是找 clang 编译 C 文件的包装:27-50, 131-138。2. v1 漏掉的真阻断项比 v1 全部 P0 更致命这几条是实跑探针编译 执行发现的v1 一条都没提。它们的共同点不是性能不够好而是这行代码写不出来。2.1 光明的异步代码没有启动入口 最高优先语法层是齐的异步 段落→async defsrc/parser_stmt.py:330-345、src/code_generator.py:1409、等待 X→awaitsrc/parser_expr.py:423-449、异步 遍历→async for:339-342、使用 异步→async with:4851-4855、异步 作用域→asyncio.gather:3347、code_generator.py:1998-2019。但没有asyncio.run等价物顶层等待 主()。→ 模块级裸await 主()→ 实测SyntaxError: await outside function运行异步(...)不存在ParseError创建事件循环/事件循环运行只出现在src/lexer.py:238-239的标识符白名单里codegen 与 stdlib 零实现退路也堵死引 Pythonasyncio.run(主())中 L4 块exec到独立 ModuleType 命名空间看不见光明侧定义的主→ 实测NameError: name 主 is not definedtests/test_async.py的异步测试全是断字符串assert async def in py_code唯一真跑的test_yield_simple_values:529-548跑的是手写 Python 而非光明产物——所以这个洞没有任何测试守着。含义今天用光明写不出任何能跑起来的 async agent loop。转译、原生两条路线同时被这一条卡死。2.2yield from静默错编生成 从 乙()。→yield 从乙()两条语句生成 全部 乙()。→yield all(乙)()。编译期零提示运行期才炸。生成器委托是流式解析器的刚需SSE 分帧、chunked 解码天然是嵌套生成器。静默错编比报错更危险。2.3映射/筛选参数顺序反了映射([1,2], 接收 数返回 数 乘 2)→map([1, 2], lambda ...)→ 运行时TypeError: function object is not iterable。定义在src/keywords.py:355-356arity2codegen 按源序直落。两个最基础的高阶内置动词是坏的。2.4 调用侧关键字实参不支持打印(甲 1)→ 实测意外的标记: 「」src/parser_expr.py:2564-2592有 C 风格 kwarg 代码路径但未生效。一个有几十个可选项的框架超时、重试、并发度、工具过滤器没有 kwargs 极难写。2.5 没有global/nonlocal等价物函数内设 计 为 计 加上 1编成计 (计 1)→UnboundLocalError。跨作用域可变状态只能靠对象属性或可变容器兜。2.6 泛型是空壳、可空类型?词法层不存在类 栈[T]→class 栈:generic_params在src/parser_stmt.py:3913-3918, 4285-4290收集了但 codegen 不消费文本?→LexerError: 未知字符 ?尽管docs/可空类型unwrap系统.md声称支持。类型系统在大型框架里只能当注释用。3. 光明真实能力盘点复核后强项可以放心用异常体系try/catch/finally/else、多 catch、捕获 类型 as 变量、自定义异常继承链、裸抛出、抛出 X 从 Y—— 全部实测通过。docs/known_issues.md:27说不支持 as 变量该文档已过期类与对象继承、多继承仅继承 甲, 乙形式、己/父、构造、接口/协议→ABCabstractmethodcode_generator.py:1788-1837、静态方法/类方法/特性/抽象、私有名改写、迭代器协议__迭代__/__下一项__闭包/高阶函数端到端跑通造(5)(3)→8、lambda 多参、函数作为值、字典里放 lambda数据结构list/dict方括号即字典/set/tuple 字面量、解构赋值、列表/字典/集合推导式、切片、[等待 甲(项) 遍历 项 之 源]异步推导式字节与字符串b...字面量src/tokens.py:22、.编码()/.解码()、f-string 插值装饰器 / 上下文管理器 / 定义侧*args **kwargs原生 runtimetaggedLightValue8 种 typeruntime_typed.c:37-52、算术/字符串/列表/字典:1637/文件/系统/异常类体系:2783/类与接口:3427/运算符重载/isinstance/协程:4006228 个导出函数跨 win32-linux-darwin × x86_64-aarch64LLVM 后端是真 IR50 个_gen_*覆盖到类实例化、try/throw、async 段、await、async scopetest_llvm_exception.py12 例与test_llvm_async.py12 例是真端到端IR → clang → 跑 → 比对 stdout弱项复核确认标准库 0% 由光明写成。56 个.light里 55 个只是导出清单stdlib/文件系统.light:1-7自述本模块实现见同名 .py唯一有真实现的stdlib/列表工具.light已被后加的stdlib/列表工具.py遮蔽——stdlib/_light_import_hook.py:140-142规则是.py绝对优先。全仓PURE_LIGHT_ONLY 0即该导入钩子的.light分支在 stdlib 范围内是死代码。HTTP 无 SSE。顶层stdlib/HTTP.py14 个函数基于 urllib无任何 stream 参数stdlib/lightpub/HTTP客户端.py:110-114有iter_content转发但无iter_lines全仓event-stream|EventSource|SSE|chunked在 stdlib/contrib 中零命中。没有任何 SSE 帧解析器。JSON Schema 校验是玩具。stdlib/JSON.py:777-795的JSONSchema验证只认type/properties/required/items四个关键字:798-829缺 enum/范围/pattern/format/oneOf/anyOf/$ref/additionalProperties返回裸 bool不产出错误路径且:794一个except:把实现 bug 一并吞成校验失败。事件总线不完整。stdlib/lightpub/事件驱动.py:32-46只有注册往 asyncio loop 对象上 monkey-patch_events没有 emit/dispatch能用的 pub-sub 是stdlib/lightpub/消息队列.pyimport queue/threading。插件系统在contrib/插件系统.py340 行含注册扩展点:155/触发扩展点:161/扩展点:214/热更新:279——有但在 contrib 不在 stdlib且是 Python 写的。PTY 与沙箱彻底为零。全仓openpty|winpty|conpty|import pty|seccomp|landlock|prctl|ptrace仅 2 处命中都是 SFT 训练语料里的噪声。原生侧无网络无线程见 §0。转译侧有stdlib/网络.py、stdlib/lightpub/Socket.py的 socket 薄封装。模块系统拒绝循环依赖src/module_resolver.py:45-57, 573-675, 837-845抛CircularDependencyError。65 包级框架若照搬 harness 的包间引用图会撞上这条。推导式介词与遍历语句不一致推导式只认之/在不认于遍历语句认于。同一概念两套介词。4. 难点重排原生优先口径#难点阻断性light 现状实测难度1异步代码无启动入口 硬阻断写不出第一行语法全齐asyncio.run等价物零实现★★2原生 socket 非阻塞 IO 原生路线硬阻断runtime_typed.c零网络零多路复用★★★★★3原生调度器接 IO 唤醒 与 #2 同生死协程调度器已有缺 IO 等待队列★★★★4前端小缺陷群yield from / kwargs / 映射筛选 / global 逐个都能卡死具体模块见 §2★★5SSE / chunked 流式解析 LLM 对接必需零★★6进程执行引擎进程组 / 信号升级 / 有界输出spill / taskkill tool 执行必需subprocess 薄封装无进程树管理★★★7JSON Schema 校验 tool 参数校验必需四关键字玩具版★★8事件总线 / 插件Cordis 等价 可插拔架构地基contrib 有 Python 版需提级 光明重写★★9MCP 客户端协议栈 生态互通零转译路线可导入 mcp★★★10标准库自举率 0% 语言能力这件事本身.light全是清单导入钩子分支死代码★★★11PTY 交互式终端零★★★★12沙箱 landlock/seccomp 安全边界零转译路线可 ctypes★★★★13循环依赖硬拒绝 / 泛型空壳 / 可空?缺失 大型项目可维护性见 §3 弱项★★★难度 ★ 与阻断性是两个正交维度#1 和 #4 难度只有 ★★但它们卡在最前面——先修最便宜的阻断项才能开始暴露真难点。5. 判断#1 #4 必须最先做加起来是编译器前端的一批点状修复。它们成本最低、解锁面最大修完转译路线上的 agent loop 立刻可写原生路线的前端src/llvm/compiler.py共用同一套 lexer/parser同步受益。#2 #3 是原生优先口径下真正的核心工程也是 v1 完全找错了位置的地方。目标不该是消灭 PyObject*那是死代码而是给runtime_typed.c补上 socket 跨平台 IO 多路复用并把g_scheduler从纯协作式升级成有 IO 等待队列的事件循环。这一步做完原生二进制跑 agent loop才从口号变成可验证目标。#5–#8 走双实现先用.light写一遍同时喂给转译与原生两条后端这既是 harness 的必需件也顺手把「标准库自举率 0%」这条从 0 往上抬。新增能力一律不许留同名.py影子否则_light_import_hook.py:140-142会让光明版永远不被加载。#9/#11/#12 押后理由是它们都是接一个已有的外部协议/系统能力纯工程量不产生语言层面的信息。真正能逼语言变强的是 #1–#8。一个必须承认的现实原生二进制跑完整 harness在 #2/#3 落地前是不可能的。所以路线不是二选一而是同一份.light源码、两条后端并跑——转译路线负责今天就能跑、暴露语言缺陷原生路线负责最终目的地用同一套端到端用例双跑谁跑不过谁就是待补能力。这样北极星不变又不用等 runtime 完工才开始写 harness。v2 定稿 2026-08-21。所有文件:行号均为本次源码实测。配套改进计划见复刻harness驱动_light升级计划.md可分发任务书见任务书/。comate复核两篇文档已改写为 v2另产出 4 份可直接分发的任务书。所有结论都经源码实测复核含实跑编译执行探针。hy3 判错的三处最要紧1. 「原生 list/dict 仍是PyObject*」不成立。c_backend.py:22-23那张PY_TYPE_TO_C表全文件零引用是死代码实际走void**生成的 C 里连#include Python.h都没有。而且c_backend.py根本不是原生主路线它是 光明→Python源码→ast.parse→C 的玩具60 个测试全是字符串断言、无一真调 clang。真原生路线是src/llvm/runtime_typed.c4344 行原生 tagged value / list / dict / 类 / 异常 / 接口早就有了。所以 hy3 的头号 P0「消灭 PyObject*」是个伪 P0已删。2. 「无自研事件循环」只对一半。runtime_typed.c:4006-4246已有协程 LightSchedulerg_scheduler Duffs device 恢复。缺的是右半边——没有 IO 等待队列协程只能主动 yield不能被 socket 可读唤醒。3.light7 compile --native这个命令不存在。只在light6.py里而pyproject.toml:67-69只有light/lightc两个入口。hy3 完全漏掉的头号阻断光明的异步代码没有启动入口。语法齐全异步 段落/等待/异步 遍历/使用 异步/异步 作用域全通但顶层等待 主()。→SyntaxError: await outside function无asyncio.run等价物创建事件循环只在src/lexer.py:238-239白名单里、后端零实现退路引 Pythonasyncio.run(主())也堵死L4 块 exec 到独立命名空间看不见光明侧的主。今天用光明写不出任何能跑起来的 async agent loop转译和原生两条路线同时被这一条卡死。而且tests/test_async.py全是断字符串assert async def in py_code这个洞没有任何测试守着。同批还有生成 从 X()yield from静默错编成两条语句、映射/筛选参数序反了直接 TypeError、调用侧f(甲1)不支持、无global/nonlocal。这几条难度都只有 ★★但卡在最前面。你按「原生优先」拍定后路线是这样落的同一份.light源码、两条后端并跑。转译负责今天就能跑、立刻暴露缺陷LLVM 原生负责最终目的地同一套端到端用例双跑谁跑不过谁就是待补能力。北极星不变也不用等 runtime 完工才开始写 harness。原生优先下真正的 P0 换成了runtime_typed.c一行网络代码都没有——sys/socket|epoll|kqueue|WSA|pthread与select|poll|O_NONBLOCK全部零匹配。4 份任务书任务书/目录文件归属互不重叠A 前端阻断清障关键路径优先启动—src/lexer.py/parser_*/code_generator.py。修异步入口、yield from、映射筛选、kwargs、global。LLVM 后端共用同一套前端所以两条路线同步受益。B 原生网络事件循环—src/llvm/runtime_typed.c。socket 族 → poller 抽象先 select 兜底再换 epoll/kqueue/WSAPoll→ 调度器接 IO 唤醒 定时器 破 256 协程上限。已提醒 Duffs device 下跨挂起点局部变量保活是最易出错处。C SSE LLM 客户端 JSON Schema— 全部新建.light。D 进程执行引擎 事件总线/插件— 全部新建.light。一条我加进去的硬约束stdlib 里运行期真正由光明代码提供的模块数是 0/134 0%。56 个.light里 55 个只是导出清单唯一有实现的列表工具.light被后加的列表工具.py遮蔽——_light_import_hook.py:140-142规定.py绝对优先所以那个钩子的.light分支在 stdlib 范围内是死代码。所以任务 C/D 的铁律是新模块只建.light绝不建同名.py引 Python计数恒为 0。绕不过的地方登记成语言缺陷交回任务 A。这才是在实践中暴露短板——用逃逸口掩盖缺陷等于把整件事的意义废掉。度量就两个语言自举率和逃逸计数。另外顺手登记了 7 条会持续误导后来者的仓库债务llvm_backend.py名不副实、两条 LLVM 路径并存、--target wasm静默生成.py、test_llvm_pipeline.py:41-75断言returncode in [0,1]成败都算过、docs/known_issues.md:27已过期等在升级计划 §5。M3 的 agent loop session 留给主线自己做当压力源。