news 2026/8/23 7:28:03

秉承在实践中学习,在项目中提高编程语言的综合能力的原则,准备在复刻deepseek harness项目的过程中,找到光明的不足,补足短板,让光明语言真正能够实战!请你修正一下,然后制定改进计划!

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
秉承在实践中学习,在项目中提高编程语言的综合能力的原则,准备在复刻deepseek harness项目的过程中,找到光明的不足,补足短板,让光明语言真正能够实战!请你修正一下,然后制定改进计划!

秉承在实践中学习,在写项目中提高编程语言的综合能力的原则,准备在复刻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(光明 v7);harness 侧沿用 v1 的G:\github\deepseek-harness盘点。路线口径已由用户拍定:原生优先(原生二进制承载 harness 是北极星),转译路线仅作 MVP 保底。本文按该口径重排难度。


0. 一句话结论(v2)

真正的门槛不是"消灭 PyObject*",而是原生 runtime 一行网络代码都没有。

src/llvm/runtime_typed.c(4344 行)已经有原生的 tagged value、list、dict、类、异常、协程调度器——原生复杂类型这一关已经过了。但它#include只有 stdio/stdlib/string/stdint/time/math/sys-stat/ctype/errno(src/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.py,733 行)全是字符串断言,没有一个真调 clang 编译运行

结论:把c_backend.py:22-23当作"原生 runtime 的 Python 依赖证据"是找错了地方。这条 P0(v1 的 U2「消灭 PyObject*」)应当删除

错误 2:「无自研事件循环」—— 一半不成立

runtime_typed.c:4006起就是协程/异步分区,已经有:

  • LightCoroutine:4027-4043)、LightFuture:4045-4053
  • LightScheduler{ run_queue, all_coros, num_coros }:4056-4063)+ 全局单例g_scheduler:4063
  • dv_scheduler_run()单线程取队首(:4233-4243)、dv_coro_await:4186)、dv_coro_run_to_completion:4246
  • 恢复机制 Duff's 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:mainlightc = cli.lightc:main安装后的用户拿不到light7命令。真正的原生入口是cli/light.py:1295-1298compile --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 分支静默生成.pysrc/wasm_target.py(577 行)是 Pyodide 方案,不产.wasm,且除一个测试外无任何生产代码引用。
  • 两条 LLVM 路径并存src/llvm/(主力,真 IR,codegen.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-345src/code_generator.py:1409)、等待 Xawaitsrc/parser_expr.py:423-449)、异步 遍历async for:339-342)、使用 异步async with:4851-4855)、异步 作用域asyncio.gather:3347code_generator.py:1998-2019)。

没有asyncio.run等价物

  • 顶层等待 主()。→ 模块级裸await 主()→ 实测SyntaxError: 'await' outside function
  • 运行异步(...)不存在(ParseError)
  • 创建事件循环/事件循环运行只出现在src/lexer.py:238-239的标识符白名单里,codegen 与 stdlib 零实现
  • 退路也堵死:引 Python:asyncio.run(主())中 L4 块exec到独立 ModuleType 命名空间,看不见光明侧定义的→ 实测NameError: name '主' is not defined

tests/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-356(arity=2),codegen 按源序直落。两个最基础的高阶内置动词是坏的。

2.4 调用侧关键字实参不支持

打印(甲 = 1)→ 实测意外的标记: 「=」src/parser_expr.py:2564-2592有 C 风格 kwarg 代码路径但未生效)。一个有几十个可选项的框架(超时、重试、并发度、工具过滤器)没有 kwargs 极难写。

2.5 没有global/nonlocal等价物

函数内设 计 为 计 加上 1编成计 = (计 + 1)UnboundLocalError。跨作用域可变状态只能靠对象属性或可变容器兜。

2.6 泛型是空壳、可空类型?词法层不存在

类 栈[T]:class 栈:generic_paramssrc/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 变量,该文档已过期)
  • 类与对象:继承、多继承(仅继承 甲, 乙形式)、/、构造、接口/协议→ABC+abstractmethod(code_generator.py:1788-1837)、@静态方法/@类方法/@特性/@抽象、私有名改写、迭代器协议__迭代__/__下一项__
  • 闭包/高阶函数:端到端跑通(造(5)(3)8)、lambda 多参、函数作为值、字典里放 lambda
  • 数据结构:list/dict(方括号即字典)/set/tuple 字面量、解构赋值、列表/字典/集合推导式、切片、[等待 甲(项) 遍历 项 之 源]异步推导式
  • 字节与字符串b"..."字面量(src/tokens.py:22)、.编码()/.解码()、f-string 插值
  • 装饰器 / 上下文管理器 / 定义侧*args **kwargs
  • 原生 runtime:taggedLightValue(8 种 type,runtime_typed.c:37-52)、算术/字符串/列表/字典(:1637)/文件/系统/异常类体系(:2783)/类与接口(:3427)/运算符重载/isinstance/协程(:4006),228 个导出函数,跨 win32-linux-darwin × x86_64-aarch64
  • LLVM 后端是真 IR,50 个_gen_*覆盖到类实例化、try/throw、async 段、await、async scope;test_llvm_exception.py(12 例)与test_llvm_async.py(12 例)是真端到端(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-114iter_content转发,但iter_lines,全仓event-stream|EventSource|SSE|chunked在 stdlib/contrib 中零命中。没有任何 SSE 帧解析器
  • JSON Schema 校验是玩具stdlib/JSON.py:777-795JSONSchema验证只认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/插件系统.py(340 行,含注册扩展点:155/触发扩展点:161/@扩展点:214/热更新:279)——有,但在 contrib 不在 stdlib,且是 Python 写的
  • PTY 与沙箱彻底为零。全仓openpty|winpty|conpty|import pty|seccomp|landlock|prctl|ptrace仅 2 处命中,都是 SFT 训练语料里的噪声。
  • 原生侧无网络无线程(见 §0)。转译侧有stdlib/网络.pystdlib/lightpub/Socket.py的 socket 薄封装。
  • 模块系统拒绝循环依赖src/module_resolver.py:45-57, 573-675, 837-845CircularDependencyError)。65 包级框架若照搬 harness 的包间引用图,会撞上这条。
  • 推导式介词与遍历语句不一致:推导式只认/,不认遍历语句认。同一概念两套介词。

4. 难点重排(原生优先口径)

#

难点

阻断性

light 现状(实测)

难度

1

异步代码无启动入口

🔴 硬阻断,写不出第一行

语法全齐,asyncio.run等价物零实现

★★

2

原生 socket + 非阻塞 IO

🔴 原生路线硬阻断

runtime_typed.c零网络零多路复用

★★★★★

3

原生调度器接 IO 唤醒

🔴 与 #2 同生死

协程调度器已有,缺 IO 等待队列

★★★★

4

前端小缺陷群(yield from / kwargs / 映射筛选 / global)

🔴 逐个都能卡死具体模块

见 §2

★★

5

SSE / chunked 流式解析

🟠 LLM 对接必需

★★

6

进程执行引擎(进程组 / 信号升级 / 有界输出+spill / taskkill)

🟠 tool 执行必需

subprocess 薄封装,无进程树管理

★★★

7

JSON Schema 校验

🟠 tool 参数校验必需

四关键字玩具版

★★

8

事件总线 / 插件(Cordis 等价)

🟠 可插拔架构地基

contrib 有 Python 版,需提级 + 光明重写

★★

9

MCP 客户端协议栈

🟡 生态互通

零;转译路线可导入 mcp

★★★

10

标准库自举率 0%

🟡 "语言能力"这件事本身

.light全是清单,导入钩子分支死代码

★★★

11

PTY

🟡 交互式终端

★★★★

12

沙箱 landlock/seccomp

🟡 安全边界

零;转译路线可 ctypes

★★★★

13

循环依赖硬拒绝 / 泛型空壳 / 可空?缺失

🟡 大型项目可维护性

见 §3 弱项

★★★

难度 ★ 与阻断性是两个正交维度:#1 和 #4 难度只有 ★★,但它们卡在最前面——先修最便宜的阻断项,才能开始暴露真难点


5. 判断

  1. #1 + #4 必须最先做,加起来是编译器前端的一批点状修复。它们成本最低、解锁面最大:修完,转译路线上的 agent loop 立刻可写,原生路线的前端(src/llvm/compiler.py共用同一套 lexer/parser)同步受益。
  1. #2 + #3 是原生优先口径下真正的核心工程,也是 v1 完全找错了位置的地方。目标不该是"消灭 PyObject*"(那是死代码),而是给runtime_typed.c补上 socket + 跨平台 IO 多路复用,并把g_scheduler从纯协作式升级成"有 IO 等待队列"的事件循环。这一步做完,"原生二进制跑 agent loop"才从口号变成可验证目标。
  1. #5–#8 走双实现:先用.light写一遍(同时喂给转译与原生两条后端),这既是 harness 的必需件,也顺手把「标准库自举率 0%」这条从 0 往上抬。新增能力一律不许留同名.py影子,否则_light_import_hook.py:140-142会让光明版永远不被加载。
  1. #9/#11/#12 押后,理由是它们都是"接一个已有的外部协议/系统能力",纯工程量,不产生语言层面的信息。真正能逼语言变强的是 #1–#8。
  1. 一个必须承认的现实:"原生二进制跑完整 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.c(4344 行),原生 tagged value / list / dict / 类 / 异常 / 接口早就有了。所以 hy3 的头号 P0「消灭 PyObject*」是个伪 P0,已删。

2. 「无自研事件循环」只对一半。runtime_typed.c:4006-4246已有协程 +LightScheduler+g_scheduler+ Duff's 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白名单里、后端零实现;退路引 Python:asyncio.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|pthreadselect|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 协程上限。已提醒 Duff's 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静默生成.pytest_llvm_pipeline.py:41-75断言returncode in [0,1]成败都算过、docs/known_issues.md:27已过期等),在升级计划 §5。

M3 的 agent loop + session 留给主线自己做,当压力源。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/23 7:25:12

储能 BMS 的绝缘检测,到底是怎么同时测出正、负两路绝缘电阻的

在储能系统里&#xff0c;绝缘检测是少数几个「平时没人注意&#xff0c;出事就是大事故」的功能。电池堆的正负极母线动辄几百伏&#xff0c;一旦对机壳的绝缘性能下降&#xff0c;轻则漏电报警&#xff0c;重则电弧、短路、起火。所以几乎每一套正经的储能 BMS 都会把绝缘检测…

作者头像 李华
网站建设 2026/8/23 7:24:16

工业边缘AI实战:基于NXP i.MX 8M Plus的嵌入式硬件选型与开发指南

1. 项目概述&#xff1a;当工业边缘遇到AI&#xff0c;我们需要什么样的“硬核”&#xff1f;最近几年&#xff0c;工业圈子里聊得最火的话题&#xff0c;除了数字化转型&#xff0c;就是边缘计算和AI了。大家不再满足于把海量的设备数据一股脑儿往云端传&#xff0c;延迟、带宽…

作者头像 李华
网站建设 2026/8/23 7:23:48

C++函数模板:从类型参数化到泛型编程实战指南

1. 从“重复造轮子”到“一次编写&#xff0c;处处适配”的思维转变如果你写过一段时间的C&#xff0c;尤其是在处理一些需要支持多种数据类型的算法或功能时&#xff0c;大概率会遇到一个让人头疼的问题&#xff1a;代码重复。比如&#xff0c;你想写一个函数来比较两个值的大…

作者头像 李华
网站建设 2026/8/23 7:21:58

OpenAI 开源的 Codex Harness,藏着 Agent 真正的胜负手

OpenAI 开源的 Codex Harness&#xff0c;藏着 Agent 真正的胜负手 2026 年 8 月 19 日&#xff0c;OpenAI 在官方博客发布《Codex as a platform: build on the open agent harness》&#xff0c;宣布将驱动 Codex App、命令行工具与 IDE 扩展运行的底层执行框架——Codex Har…

作者头像 李华
网站建设 2026/8/23 7:20:50

电流调整器MEL71XX 系列

概述 MEL71XX 系列芯片是一个低压差电流调整器&#xff0c;具有260-350mA 的输出恒定电流。 应用场合  给LED驱动提供能源 特点  无外部元器件  输出260-350mA恒定电流  输出短路保护电路  电源电压范围&#xff1a;2.7V~6V 封装形式  3-pin SOT89-3、SO…

作者头像 李华