E 语言文档
为人类与 AI 编写者提供的权威参考 · 契约基线 e_contract_v0 · 更新于 2026-09-05
1.E 是什么 稳定¶
E 是一门 LLM 专用语言(AI-Native Language for LLM):确定性骨架由编译器 100% 掌控,语义实现由 LLM 只填空函数体。它被设计为 EOS 操作系统的系统语言,目标是在 Linux 上先完全替换 Python、再完全替换 C。
设计哲学——意图即代码(Intent as Code):人类/高阶 Agent 只负责界定意图与验收(What:签名/类型/管道/断言),算法实现(How:while/if/循环体)由 LLM 通过 @augment 填充,GCC+断言门负责物理校验。E 刻意不提供手写过程式语句——这不是缺陷,是范式选择:单次 LLM 生成不可信,但「确定性骨架 + 演化漏斗」可累积可信。E 的正确用法:写契约,不写算法。
2.30 行快速上手 ¶
space<8> std {
fn gcd(a: u64, b: u64) -> u64
}
fn std::gcd(a: u64, b: u64) -> u64 {
// @augment: 欧几里得辗转相除法
}
fn main() -> i32 {
x: u64 = 462
y: u64 = 1071
x | std::gcd(y) | assert_eq(21)
return 0
}
这一个完整程序的五个部分:
space<8>— 声明 8 字节对齐的内存域fn … ->— 函数签名(骨架,LLM 不可改)@augment— LLM 填充指令,只作用于紧邻的空函数体|— 管道:x | std::gcd(y)等价于std::gcd(x, y)assert_eq(21)— 断言验收,期望 gcd(462,1071)=21
3.获取与安装 ¶
# 下载 Linux 发行包(真编译器 v1.0 · 2026-09-05实测链)
curl -O https://eoslang.com/elang_linux_dist.zip
unzip elang_linux_dist.zip && cd elang
# 编译并运行文档示例(ASan沙箱 + LLM语义填充)
./elangc examples_gcd.e -o demo --asan --run
# 输出: [E] x => 21 → 运行通过 rc=0
# 离线模式(纯骨架,无需任何API key)
./elangc examples_gcd.e -o demo2 --no-augment
依赖声明(诚实口径):当前编译器骨架为 Python 实现、后端发射 C 文本经 GCC 编译、libc 为 C——三者分别对应路线图「第一相抛 Python / 第二相抛 C」。E 语言层本身不依赖任何 C 知识即可书写。
4.词法结构 稳定¶
| 元素 | 规则 | 示例 |
|---|---|---|
| 标识符 | [A-Za-z_][A-Za-z0-9_]*,区分大小写 | gcd、std、max_subarray |
| 类型名 | 基础类型关键字 | u64、f64、str |
| 注释 | // 行注释(@augment 是其特殊前缀) | // 普通注释 |
| 整数字面量 | 十进制;支持 _ 分隔 | 1071、1_000_000 |
| 浮点字面量 | 标准小数/科学计数 | 3.14、1e-9 |
| 运算符 | | -> :: = == != < > <= >= + - * / % | — |
5.类型系统 稳定¶
| 类别 | 类型 | 说明 |
|---|---|---|
| 无符号整数 | u8 | 0 ~ 255 |
u16 | 0 ~ 65,535 | |
u32 | 0 ~ 4.29e9 | |
u64 | 0 ~ 1.84e19(中间量推荐,防溢出) | |
| 有符号整数 | i8/i16 | ±128 / ±32,768 |
i32 | ±21.47亿(main 返回约定) | |
i64 | ±9.22e18 | |
f32/f64 | IEEE 754 单/双精度 | |
| 其他 | bool str | 布尔 / 字符串 |
| 复合 | &T | 借用引用(只读视图) |
溢出守卫(Gatekeeper v2):裸算术密集的实现会被 SEC-019 规则提示替换为 Safe-Math 原语;签名比对阶段 UB 直接判负。
6.声明与空间 ¶
6.1 space 内存域
space<N> 名字 { 函数签名… } // N = 字节对齐(编译期校验)
space 是 E 的模块与内存契约单元:签名集合在其中声明,实现以 空间::函数 限定。
6.2 变量声明
x: u64 = 462 // 显式类型 + 初始化
sig: f64 = 0.35 // 浮点同样显式
变量声明必须显式类型(E 不做隐式推断——骨架确定性优先)。
7.函数 ¶
// 签名(域内声明;LLM 不可触碰)
space<8> math {
fn fib(n: u64) -> u64
}
// 实现(域限定;函数体可留空交给 @augment,或由人类直接书写)
fn math::fib(n: u64) -> u64 {
// @augment: 迭代版斐波那契, u64 中间量, 循环不递归
}
// main 约定
fn main() -> i32 { // 返回 0 = 成功
return 0
}
同一签名只能有一个实现;签名与实现的类型不一致在编译期直接拒绝(零容忍)。
8.管道操作符 | 稳定¶
管道是 E 的核心组合原语,从左向右读:
x | f(y) ≡ f(x, y)
x | f(y) | g(z) ≡ g(f(x, y), z)
data | load() | transform(n) | emit(out)
- 左值作为被调函数的第一个参数注入
- 建议嵌套不超过 3 层;更深时拆中间变量(Gatekeeper SEC-001 复杂度规则会拦截过长链)
9.@augment 指令 稳定¶
@augment 是 LLM 与 E 语言的唯一接口。铁律边界:
| LLM 可以 | LLM 不可以 |
|---|---|
| 填充紧邻的空函数体(C 语句子集) | 修改签名 / space 声明 / 管道结构 / assert |
| 读取 goal 与 criteria 作为意图输入 | 读取或修改验收与判分逻辑 |
提示词写法(决定通过率)
// ❌ 模糊(拒绝率高)
// @augment: 求最大公约数
// ✅ 具体(算法 + 关键优化点 + 边界)
// @augment: 欧几里得辗转相除,位运算优化,全零边界返回0
10.断言验收 ¶
x | std::gcd(y) | assert_eq(21)
验收三重门(全部通过才判 ✅):
- GCC 编译(
-O3 -Wall -lm,含 ASan 沙盒轮) - 3 轮运行(消除偶发通过)
- 签名比对(输出签名与 goal 的 criteria 一致)
反作弊声明:只打印"成功"而无真实行为、硬编码答案、忽略输入的候选程序,由 Gatekeeper v2 + 对抗测试集(SEC-087)负责识别与拒绝。验收逻辑与生成器物理隔离。
11.双轨编译器 ¶
.e 源码
↓ 轨道一:确定性骨架(词法/解析/类型契约/C发射)— 100% 确定性, 零 LLM
↓ 轨道二:LLM 语义增强(只填 @augment 空体, 失败自动重试降级)
↓ Gatekeeper v2 静态卡口(圈复杂度/递归深度/猴子补丁/裸算术)
↓ GCC + ASan 沙盒 → 三轮运行 + 签名比对
可执行文件 ✅
12.编译流水线状态 ¶
| 组件 | 状态 | 说明 |
|---|---|---|
| 词法器 / 解析器 / 骨架AST / 类型契约 / C发射 | 已验证 | EB01-05 全过 |
| 意图桥 / Prompt组装 / 双轨编译 / 错误自愈 / 缓存 | 已验证 | EB06-10 全过 |
| 测试harness / 回归 / Diff / 基准 / ASan钩子 | 已验证 | EB11-15 全过 |
| E-IR 字节码直发(去 C 文本) | 规划中 | SEC-061/062, ET03 |
| 编译器 E 自举(去 Python) | 规划中 | 第一相里程碑 |
13.守门人 Gatekeeper v2 演进中¶
所有 .e 产物编译前必须通过的静态硬规则(SEC 池落地件):
| 规则 | 阈值 | 动作 |
|---|---|---|
| SEC-001 圈复杂度 | 函数 > 10 | 拒绝编译 → 触发结构重构 |
| SEC-011 递归深度 | 无终止自递归 | 拒绝编译 |
| SEC-024 猴子补丁 | 硬编码 if-else 链 ≥ 5 分支 | 拒绝 → 强制抽象算法 |
| SEC-019 裸算术 | > 20 处 | 提示级 → Safe-Math 替换建议 |
14.流形算子(语义空间层)¶
Ω = space<256>("Analytics Core") // 开辟张量语义空间
s1 = Ω | create("系统初始化") // 增:流形锚定
s2 = s1 | update("用户登录") // 改:流形演化
sig = s2 | read() // 查:签名坍缩 Σ
s3 = s2 | delete() // 删:拓扑剪枝
15.std 标准组件 400/400 已铸¶
400 条标准库组件全部通过 GCC 三连验收,作为 E-VM 原语重写的行为规格参考(完整清单见 进度页):
- 容器:vec / map / set / ring
- 算法:排序 / 搜索 / 图 / 大数(ALG 池 300/300 全清)
- 系统:文件 / 网络 / 时间 / 线程(过渡期经 C-FFI)
16.ETP 张量协议 施工中¶
ET01-02 已交付:64B 定长包头二进制线束(Magic|Opcode|Len|TensorPtr|CRC32)与 mmap 零拷贝张量沙盒(256MB 连续页,实测 15.5GB/s)。EPT 池 50 条规格攻坚中。
17.命名与风格 ¶
- 函数/变量:
snake_case;空间:小写单词;语义空间实例可用Ω - 禁止
var1/temp_a/data2类无语义名(SEC-027 命名熵打分) - 函数体建议 ≤ 40 行;单一职责(SEC-031 SRP 量化)
18.常见错误与规避 ¶
| 错误 | 症状 | 规避 |
|---|---|---|
| 改动了签名 | 编译期拒绝: 签名不一致 | 只填函数体 |
| @augment 太模糊 | 产物偏离意图 / 反复重试 | 写算法名+关键优化点+边界 |
| 中间量溢出 | ASan 报 UB / 断言不符 | 中间量用 u64/i64 |
| 管道嵌套过深 | 解析失败 / SEC-001 拦截 | 拆中间变量 |
| 函数体过长 | 900s 超时 | 拆函数,每函数单一职责 |
| 零除 / 越界 | Panic / ASan 中止 | 先判界再访问;除法验非零 |
19.完整示例库 ¶
19.1 算法函数(池任务标准模板)
space<8> std {
fn max_subarray(arr: &i64, n: u64) -> i64
}
fn std::max_subarray(arr: &i64, n: u64) -> i64 {
// @augment: 卡丹算法,单扫O(N),全局/局部最大交替维护,全负数取最大元素
}
19.2 数据管线(语义算子流)
Ω = space<128>("Task Queue Stats")
s1 = Ω | create("队列初始化")
s2 = s1 | update("生产者入队 100")
sig = s2 | read()
19.3 生产接线(NE 原生替换模板)
space<8> poolstat {
fn count_str(path: &str, needle: &str) -> i64
}
fn poolstat::count_str(path: &str, needle: &str) -> i64 {
// @augment: 64KB缓冲流式读文件,memmem计数,防跨块漏匹配
}
20.规范演进 ¶
| 版本 | 内容 | 状态 |
|---|---|---|
| v0 | 契约基线(本页语法集) | 现行 |
| v1 | E-IR 字节码规范(64 位定长指令集) | 规划 GUI-002 |
| v1.x | requires/ensures 契约语法 | 规划 SEC-002 |
本页随语法演进同步更新,真源为仓库 elang_frontend/e_contract_v0.md 与 docs/E_LANG_GUIDE.md。