双层结构 · 动态算子空间 · AI 原生语法规范 —— 设计理念总纲(2026-09-06 定稿)
统计口径全公开:数据源=ecc.db全部提交记录;E任务=题面以「用E语言实现」标记;失败分三层——L1语法层(生成被解析器拒)/L2编译层(E→C后gcc报错)/L3断言层(逻辑错)。每10分钟自动刷新,永不写死。原始JSON
加载中…
E 从第一天起就是两层语言:语义层描述"状态如何演化",结构层描述"逻辑如何执行"。两层各有独立的语法、编译路径与验收方式:
┌─────────────────────────────────────────────────────┐
│ 语义层 (Semantic Layer) —— 声明式 / 开放算子空间 │
│ Ω = space<256>("Analytics") │
│ A = Ω | create("初始化") │
│ B = A | update("用户登录") | read() │
│ 验收:签名/fitness 评分(软验收) │
├─────────────────────────────────────────────────────┤
│ 结构层 (Structural Layer) —— 命令式 / 封闭语法集 │
│ space<8> std { fn gcd(a: u64, b: u64) -> u64 } │
│ x | std::gcd(y) | assert_eq(21) │
│ 验收:GCC 编译 + 断言三重门(硬验收) │
├─────────────────────────────────────────────────────┤
│ @augment 逃生舱 —— 两层的交界(E 独创) │
│ 函数体由 LLM 填充,签名与断言由 E 管死 │
│ → LLM 写实现,机器验契约;E 表达不了的算法永不堵死 │
└─────────────────────────────────────────────────────┘
为什么这样切:LLM 擅长意图与模式(语义层给它自由),不擅长精确边界与状态追踪(结构层用封闭语法+断言把它圈住)。同范本:SQL 的声明查询 vs 存储过程、K8s 的期望态 YAML vs Go 运行时。E 的独特点:把"LLM 填语义、机器验结构"做成了编译器内建的分界线。
结构层编译器已是纯 C 单文件实现(21KB,零 Python):
.e 源码 ↓ 词法分析 (C 实现,行号锚定) ← 确定性,零 LLM ↓ 递归下降解析 → 骨架 AST ← 确定性,零 LLM ↓ C 发射器 (space→声明区, ns::fn→ns__fn, 管道→函数调用) ↓ @augment 空函数体 → LLM 填充 ← LLM 唯一入口 ↓ fork-exec GCC -O2 + ASan 沙盒 ↓ 三轮运行 + 断言验收 (assert_eq) 可执行文件 ✅
验收成本实测:编译 0.4s / 内存 3MB / 运行 9ms——瓶颈 95%+ 在 LLM 侧。
曾经有,现在在,已补文档(本页+运行时件elang_agent_tool.py)——BN基准进度见progress页。
早期 E(Python 时代)的语义层是开放算子空间:LLM 可以在运行时发明新算子组合——
Ψ_agent = Ω_agent | project("Analyze Task") | optimize() | resolve();
project / optimize / resolve 并不在预定义关键字表里,运行时按意图语义解释执行(语义收敛评分)。这意味着语言的词汇可以由使用者在运行时增长,编译器不挡。
价值:AI 原生语言的关键能力——LLM 同时生成代码与新词汇,运行时按意图而非固定文法解释。静态文法(结构层)保证可验证性,开放算子(语义层)保证可进化性,两者互补。
现状:该能力保留在 elang_agent_tool.py(EpsilonAgentInterface)等运行时件中;当前生产管线(elangc_native)走结构层,未接入。规划:语法 v2 将"开放算子空间"正式化为注册式算子协议(新算子须带签名+验收样例注册后可用)——自由但不失控。
space<N>fnletif / elsewhileforreturn管道 x|f(y)assert_equ8~u64 · i8~i64 全定宽(1.6.5+含i16/i32)
⚠️ 2026-09-24 口径修正②:for 两形态(C式三段/E式 for-in)当前二进制均报语法错误,golden v2_0916_for.e 未过(22/27),标签降为「设计稿」,与 map/filter/reduce 同档——落地时 golden 自动验收。 / 2026-09-15 口径修正:@augment 为设计目标(语法层暂无解析支持,勿当作已实装);bool 字面量 true/false 暂不可用(TYPE_ERROR),bool 只能由比较式产生;while(1) 可编译但"上限可判定"属 Linter 约定非编译期强制。
| 新增 | 理由 | 状态 |
|---|---|---|
table/relation | LLM 表格推理最强,最 AI 原生的数据结构 | 设计稿 |
定长数组 [u64; N] | 排序/数据结构类算法的前提 | 设计稿 |
struct | C风格结构体布局 | ❌ Non-Goal:不入E内核,经Region/FFI边界表达 |
enum | 标签联合(网络包/AST 节点经宿主侧表达) | 设计稿 |
map/filter/reduce 组合子 | 替代 for 的 LLM 高出错区 | 设计稿 |
forall/exists 量化器 | 可机器验证的属性断言 | 设计稿 |
| 安全引用/字符串视图 | qsort 等算法刚需 | 设计稿 |
控制流设计哲学:while/for 是给"精确状态循环"的逃生舱(保留但降级);主推组合子(声明"做什么"而非"怎么转")——实测 LLM 在 for 循环边界(off-by-one)上失误率显著高于组合子。
诚实口径:语法集没有最先做完,是走了"管线先行、语法随任务生长"的路线(详见反思)。v2 起转为规范先行:语法集文档定稿 → 一致性测试集入池 → 编译器实现。
| 部件 | AI 化改造 |
|---|---|
| 语法层 | 无歧义 + 规范形态(一义一写)+ 行级报错锚点(错误信息直接可喂 LLM 修复) |
| 类型系统 | 类型即契约(前置/后置条件机器可验) |
| 控制流 | 组合子+量化子为主,while 降级逃生舱 |
| 数据结构 | 不可变优先 + 形状显式 + 无指针算术 |
| 错误处理 | 契约前置——错误在签名里声明,错误即回执 |
| 并发/IO | 声明式管道,时序归运行时 |
| 语义增强层 | @augment(E 独创):LLM 填实现、机器验契约 |
口径:所有"已实现·实测通过"项均经本地 elangc 官方构建版实测(公开 Playground 环境版本滞后,见下方阻塞项①;2026-09-14 复测)。四档=【已实现·实测通过】【已实现·待公开验证】【设计目标·未实现】【明确不做】。
| 档位 | 条目 |
|---|---|
| 已实现·实测通过 | 标量u8~u64/i8~i64/bool(仅比较式产生) · let绑定/return · if-else · while · space<N>命名空间(唯一模块化机制) · 管道x|assert_eq(期望值) · 算术比较 · 递归含双递归(fib(10)=55,终止性由spec递减度量约束) |
| 已实现·待公开验证 | 定长数组[T;N] · str+len() · assert_eq!宏(v1.5带golden三件,golden 19/19;公开复现通道=发布包内run_golden.sh,无源码时自动用预编译二进制,0914修复) |
| 设计目标·未实现 | 不透明Handle(u64映射) · 线性Token能力凭证(闸3) · 位运算&|^<<>>(需闸0口径变更:仅标志位集合,禁字段打包,SMT须(_ BitVec N)且移位≥位宽有定义) · 原生pre/post(现存Task Manifest JSON,声明式spec) · WASM后端(现仅E→C→gcc;微信小程序不可跑任意WASM,WASM仅服务端) · @augment解析支持 · StackOnly强制(需Linter/codegen检查) · 无界循环约束(Linter约定,while(1)实测可编译) |
| 明确不做 | Vector/ArrayList/push/pop动态容器(扩容破坏SMT求解终结性) · C风格struct/class/嵌套对象(布局复杂化导致验证状态空间爆炸) |
阻塞项(三条,均为工程问题非语言问题):① 公开Playground跑旧版elangc,三个官方golden在该环境报语法错误 ② v1.5包无.c/.h源码仅ELF二进制 ③ 因此"golden 19/19"外部暂不可复现(run_golden.sh已加预编译回退,待公网验证)。
1. 确定性核心零 LLM —— 词法/解析/类型/验收,LLM 不得进入 2. LLM 只准出现在两处 —— 生成实现、修复报错,且输入输出都过验收门 3. 语法集封闭+版本化 —— 扩展只能过池验收进编译器(新算子走注册协议) 4. 每个构造必须有 canonical form + 机器验证器 5. 逃生舱永存 —— @augment/FFI 在,语言永不堵死
路线定版(2026-09-18·:坚决纯E化,全原生。E 的初心是 EOS 自举语言,一切工程投入以「E 自身完成 EOS 构建」为唯一目标。与之冲突的规范一律以本版为准更新:struct 显式布局维持 Non-Goal(用 Region 句柄表达),「C 自动回退通道」仅作为过渡期编译验证手段、不作为长期路线,roadmap 按「去C」终点对齐。有冲突的旧表述(changelog 双通道口径等)以本声明覆盖。
口径定版(2026-09-14):以下各项是设计上不提供(Non-Goal),不是待实现功能。E 是为「形式化可证明」设计的极简契约语言:以扁平标量 + 线性凭证为表达单位,把内存布局、结构体打包、堆分配与 I/O 交给宿主(C 或 WASM 沙盒)。
| 不做 | 理由 | 替代路径 |
|---|---|---|
| C 风格 struct(布局/打包/对齐入语言内核) | 结构体布局是 LLM 高错误率区,且使内存访问无法静态验证 | Region 句柄 + Offset:读=ReadRegisterN(region, offset),写=WriteRegisterN,边界=静态证明 Offset+Width ≤ Region.Size |
| 裸指针/指针算术 | AI 产出的内存访问必须可静态验证 | 不透明 Handle(u64)+ 编译期区间断言 |
| 任意下标算术(C 数组语义) | off-by-one 是实测最高频失误 | Flat Sequence [T;N](区间断言)+ Bounded Iterator |
| 隐式类型转换/自动精度提升 | 歧义是验证的敌人 | 标量显式:u8/u16/u32/u64、i8/i64、f32/f64、bool |
| 异常展开 / GC | 控制流必须可静态枚举 | Result 返回值 + 确定性控制流 |
注:结构体更新语法(..base)随 struct 一并列为 Non-Goal。字符串视图 StrView 归 E-FFI/宿主。历史版本中"struct 待实现/静默丢弃"的表述一律以本节为准。
以下设计激进但未经数据证明。激进 ≠ 采纳——每条附证明路径,实验数据达标才考虑进入主线,数据来自统一的语法对决实验(50 条 CLRS 算法,三方首通率 + Token 消耗)。
| 激进设计 | 主张 | 风险 | 怎么证明 |
|---|---|---|---|
| 废除 if/else/for/while | 程序=状态契约+意图跃迁矩阵 | LLM 被人类代码喂大,新范式零语料,首通率可能反降 | 三方对决首通率 |
| 高密度符号集(!/->/::/@) | 单双字符替代关键字,省 30%+ token | 省 token ≠ 好理解,LLM 对新符号无先验 | token 密度 + 首通率双指标 |
| 移除 {} ; , 分隔符 | 极简缩进 + 高密度符号 | 分隔符是 LLM 的结构锚点,去掉加大歧义 | 同上 A/B 对比 |
| $$ 高阶原语别名 | $$HTTP.Serve 单 token 系统调用 | 别名表本身也是学习成本 | 建表后同任务 token 对比 |
| 全面弃 GCC+C 拥抱 Wasm | 编译 400ms→<20ms,Fuel 防死循环 | Wasmtime/Cranelift 数十 MB 重依赖,与发行包<1MB 冲突 | 十算法 wasm 跑通 + 编译耗时实测 |
| SMT 契约替代 assert_eq | requires/ensures 形式化验证 | Z3 对递归/非线性常超时 | 契约+反例+作弊检测三件套实测 |
| 多候选并行验证 | 生成 5 份并行验证取首个过 | 烧 5 倍 token | 首通率提升 vs token 成本账 |
⚙️ 裁决机制(E-Lang Benchmark):四变体(V0现行基准 / V1高密符号 / V2状态跃迁 / V3全激进)× 50道CLRS算法 × ≥3个大模型家族 = 600次独立试验。指标=Pass@1首通率(50%) + Pass@3错误自修(20%) + Token密度(20%) + 结构歧义率(10%)。硬门槛跑数前预注册锁死:控制流废除须 Pass@1降幅≤5%且Pass@3≥90%;高密符号须 Token降≥20%且歧义率<2%。达标进主线,不达标入废弃库并注明证伪原因。任务池:BN-01~08。
已验证可行的低风险项(不可变默认、Z3 双轨、Bump 分配、S-Expr、JSON 报错、Schema 导出等)不在此表,直接进实验池。
E 是"给 AI 的考卷语言":结构层把题出死(签名+断言),LLM 只负责填答案(@augment),机器负责阅卷(GCC+三重门);语义层保留开放算子空间让语言随使用进化;两者之间的张力就是 E 的进化动力。终极目标:E-VM 落地后,"算法用 E 写"从考卷模式变为执行模式(去 C),届时全平台发行包 <1MB。