言知中文编程语言计划书 by WorkBuddy
言知(Yanzhi)项目规划书
AI自动编程by WorkBuddy
言知 · 心之所向,言即所行从 zhixing (知行) 与 yanplan (言·计) 融合而来
一、项目概述
1.1 名称释义
言知(yán zhī)——"言"是表达,"知"是结构;说出的话就是有结构的知识。
| 字 | 涵义 | 对应编程 |
|---|---|---|
| 言 | 言语、表达、语法、句式 | 自然意合语法、无空格分词、DSL 模板 |
| 知 | 知识、结构、类型、抽象 | AST、宏系统、类型检查器、引用求值 |
省略了一个"行"字——不是没有,而是不言而喻:言知即行。
1.2 项目定位
一门根植于汉语思维结构的中文编程语言,同时具备:
- 可读性——中文母语者可直接阅读和书写,无需"思维翻译"
- 表达力——函数式核心 + 宏系统,不输 Lisp
- 实用性——双轨设计(原生执行 + Python 生态调用)
- 工程完备——类型检查、LSP、自举、包管理
1.3 血统与传承
zhixing (知行) yanplan (言·计) │ │ ├── 实现代码 ├── 语法设计规范 ├── 编译器/求值器 ├── 项目架构设计 ├── 标准库/LSP ├── 言律句式规范 ├── 同像性/宏 ├── 自举实施方案 └── 百家姓/中文数字 └── 场景模板/成语模式 │ │ └───────────────┬───────────────────┘ │ ┌───────▼───────┐ │ 言知 │ │ yanzhi │ │ │ │ 知为骨,言为表 │ │ 行为脉,合为意 │ └───────────────┘二、核心理念:三柱哲学
汲取前两轮头脑风暴的结论,言知的设计围绕三个哲学支柱展开:
2.1 知(Zhi)— 结构化计算
继承自 zhixing 的核心实现能力:
| 特性 | 作用 | 实现状态 |
|---|---|---|
| 无空格分词 | 贪心最长匹配,中文无需空格 | ✅ 已有(pre_tokenizer.py) |
| 中文关键字 | 定、函、若、则、遍历 | ✅ 已有 |
| 中文动词运算符 | 加、减、乘、皆(map)、只(filter) | ✅ 已有 |
| 柯里化 | 参数不足自动生成闭包 | ✅ 已有(Curry 类) |
| 同像性 | 代码即数据,'引用,行求值 | ✅ 已有 |
| 宏系统 | 宏定义与展开 | ✅ 已有(expander.py) |
| 类型检查 | 类型推导 | ✅ 已有(checker.py) |
| 标准库 | 数学、字符串、文件、网络 | ✅ 已有 |
| LSP | 语言服务器协议 | ✅ 已有 |
2.2 言(Yan)— 自然意合表达
汲取自 yanplan/言律 的设计哲学:
| 特性 | 说明 | 优先级 |
|---|---|---|
| 言律句式模板 | 当...就...要是...否则...每隔...做... | P1 |
| 主题链补全 | 省略主语/宾语的上下文推断 | P1 |
| 流水句因果链 | "天黑了。没人。灯亮。" → 隐式 if 链 | P2 |
| 成语式编程单元 | "削峰填谷""守株待兔"等结构化模板 | P2 |
| 动词白名单 | 领域专用动词语义映射 | P2 |
| 作用域块语法 | "...的时候:" 定义局部作用域 | P1 |
| 四字格模式 | 利用汉语四字节奏增强结构记忆性 | P3 |
2.3 行(Xing)— 动态语义与生态
"言知即行"——说出来就是执行:
| 特性 | 说明 | 优先级 |
|---|---|---|
管道,脉 | 数据从左向右流动,中文逗号作链式操作符 | ✅ 已有 |
| 双轨设计 | $()数学表达式 +{{}}Python 代码块 | ✅ 已有 |
| VM/字节码 | 独立虚拟机,不依赖 Python 运行时 | P1 |
| 自举 | 用言知编写言知的编译器 | P1(已有方案) |
| 包管理 | 中文包名、语义版本 | P3 |
| REPL 增强 | 语法高亮、历史回溯、补全 | P2 |
三、总体架构
3.1 寻址机制(言 → 知 → 行 互转流程)
用户输入:定平方=函x乘x x。 言层 无空格分词 → [定][平方][=][函][x][乘][x][x][。] 知层 语法分析 → Define(name="平方", value=Lambda(params=[x], body=Call( verb="乘", args=[Ident("x"), Ident("x")]))) 类型检查 → num → num 行层 求值执行 → 环境中创建函数 "平方" REPL 回显 → "平方定义完成" 回到言层3.2 双轨逃逸机制
$() 数学表达式: 纯数学符号,精确计算 $(a + b * (c - d)) {{}} Python 代码块: 调用 Python 生态 {{os.listdir(".")}} 中文语句: 自然语法,逻辑控制 若 x 大 10 则 "大了" 否则 "小了"三种语法在同一个源文件中可以自由混用,编译时自动识别上下文切换。
四、从 zhixing 到 yanzhi 的演化路径
阶段〇:遗产保留(不丢失任何现有功能)
言知完整继承 zhixing 所有已有能力:
| 模块 | 当前文件 | 处理方式 |
|---|---|---|
| 预分词层 | compiler/pre_tokenizer.py | 保留 + 扩展中文句式识别 |
| 词法分析 | compiler/lexer.py | 保留 |
| 语法分析 | compiler/parser.py | 保留 + 新增言律句式规则 |
| AST | compiler/ast.py | 保留 + 新增自然语句节点 |
| 宏展开 | compiler/expander.py | 保留 |
| 代码生成 | compiler/codegen.py | 保留 |
| 求值器 | runtime/evaluator.py | 保留 |
| VM/字节码 | runtime/vm.py | 保留 + 优化 |
| REPL | runtime/repl.py | 保留 + 增强 |
| 类型检查 | typechecker/checker.py | 保留 |
| LSP | lsp/server.py | 保留 |
| 标准库 | stdlib/ | 保留 + 扩展 |
| 示例 | examples/ | 保留 + 增加言律示例 |
阶段一:言律集成(P0 核心)
在 zhixing 基础上新增言律自然语言层的模块:
| 新模块 | 功能 | 依赖 |
|---|---|---|
yan/syntax_templates.py | 句式模板解析(当→if,每隔→loop) | pre_tokenizer |
yan/topic_chain.py | 主题链补全,省略主宾语的上下文恢复 | parser |
yan/scope_block.py | "的时候:"作用域块解析 | parser |
yan/action_vocab.py | 动词白名单,高层语义映射 | evaluator |
yan/dsl_factory.py | 宏工厂,把句式模板编译为宏定义 | expander |
阶段二:VM 独立化(P1 性能)
当前:Python AST 求值器 目标:独立字节码 VM zhixing vm.py ──扩展──→ yanzhi bc_vm.py │ ├── 指令集设计(24-36 条指令) ├── 寄存器/栈混合模型 ├── 字节码序列化/反序列化 └── GC(标记清除或引用计数)阶段三:自举完成(P1 独立性)
沿用 yanplan 已有的自举方案:
阶段0:Python 编写的言知编译器(当前状态) ↓ 阶段1:用言知重写编译器核心(词法 + 语法 + AST) ↓ 阶段2:阶段0 编译 阶段1 → 获得言知编译器 ↓ 阶段3:言知编译器编译自身 → 自举完成 ↓ 验证:两轮编译输出一致阶段四:生态建设(P2-P3)
- 包管理器(中文报名系统)
- IDE 插件(VS Code / 编辑器 LSP 增强)
- 言律模板库("削峰填谷"等成语式编程模块)
- 教学场景适配(面向儿童的言律 Lite)
五、语法设计汇总
5.1 保留的 zhixing 语法
zhixing
复制
# 定义 定 x = 5。 定 平方 = 函 n 乘 n n。 # 条件 若 x 大 10 则 "大" 否则 "小"。 # 管道 列 1 2 3 4 5,皆乘2,只大3,印。 # 同像性 定 code = '加 5 3。 行 'code。 # 宏 宏 当(条件, 动作): 行 '若 $(条件) 则 $(动作)5.2 新增的言律自然语法
zhixing
复制
5.3 双轨语法
zhixing
复制
# 数学表达式 定 x = $(a + b * (2 - c / d)) # Python 代码块 定 files = {{os.listdir(".")}} # 混合使用 定 result = 列 $(range(10)),皆 {{lambda x: x * 2}},印。六、项目目录结构
七、开发路线图(4 阶段 · 约 6 个月)
第一阶段:言律集成(第 1-2 月)
| 任务 | 产出 | 备注 |
|---|---|---|
| 建立 yanzhi 项目结构 | 目录树搭建,从 zhixing 迁移代码 | 保留 git 历史 |
| 言律句式模板引擎 | syntax_templates.py实现 6 种句式 | 当→if,每隔→loop 等 |
| 主题链补全器 | topic_chain.py实现上下文栈 | 栈式记忆 + 最近引用 |
| 作用域块解析 | scope_block.py支持"的时候:" | |
| 言律语法测试 | 30+ 测试用例 | 句式模板 + 主题链 |
| 文档同步 | 更新语法设计规范 | 新增言律语法章节 |
验收标准:
- ✅ 以下代码可执行:
zhixing
复制
当 门开了,就开灯。 每隔 5 分钟,查温度。 回家的时候:灯亮。空调开。- ✅ 主题链可补全省略主语
- ✅ 现有 zhixing 全部测试通过
第二阶段:VM 独立化(第 2-3.5 月)
| 任务 | 产出 | 备注 |
|---|---|---|
| 指令集设计 | 24-36 条指令,覆盖现有 AST 节点 | 参考 Lua VM |
| 字节码编译器 | compiler_bc.pyAST → 字节码 | |
| VM 解释器 | vm.py字节码执行引擎 | 栈模型 |
| 性能基准测试 | 对比 AST 求值器与 VM | 目标 2-3x 提升 |
| GC 实现 | 标记清除或引用计数 |
验收标准:
- ✅ AST 求值器与 VM 输出一致
- ✅ VM 性能不低于 AST 求值器
- ✅ 全部标准库可在 VM 上运行
第三阶段:自举(第 3.5-5 月)
| 任务 | 产出 | 备注 |
|---|---|---|
| 编译器核心重写(言知) | 词法 + 语法 + AST | 自举阶段 1 |
| 自举验证 | 两轮编译一致性 | 自举阶段 2-3 |
| 性能优化 | 内联缓存、常量折叠 | |
| 错误信息增强 | 言知语言报错信息 | 中文错误提示 |
验收标准:
- ✅ 言知编译器可编译自身源码
- ✅ 两轮编译输出字节码一致
- ✅ 自举后言知可脱离 Python 编译器独立运行
第四阶段:生态建设(第 5-6 月+)
| 任务 | 产出 | 优先级 |
|---|---|---|
| REPL 增强 | 语法高亮、历史补全 | P2 |
| LSP 功能完善 | 跳转定义、自动补全 | P2 |
| VS Code 插件 | 语法高亮、代码片段 | P2 |
| 言律模板库 | 10+ 成语式编程模块 | P2 |
| 包管理器原型 | yanzhi install 包名 | P3 |
| 教学文档 | 《言知入门》系列 | P3 |
八、关键设计决策(记录为未来参考)
8.1 言律句式的实现方式
决策:用宏实现,而非修改解析器。
理由:
- 宏在运行时定义,不需要修改编译器
- 用户可自行扩展句式模板
- 保持解析器简单、可验证
python
复制
# 宏的实现思路 # 在 expander.py 中注册言律句式宏 # 用户输入 "当 A 就 B" 时: # 1. pre_tokenizer 拆分为 [当][门开了][就][开灯] # 2. parser 识别为 Call(verb="当", args=[...]) # 3. expander 展开宏当 → # Call(verb="若", args=[条件, Call(verb="则", args=[动作])]) # 4. evaluator 正常求值8.2 主题链补全策略
决策:栈式记忆 + 最近引用绑定 + 置信度阈值。
主题栈结构: [ {"subject": "灯", "type": "device", "last_action": "打开"}, {"subject": "温度", "type": "sensor", "last_value": 28} ] 省略解析: "调暗一点" → 扫描栈顶 → 匹配 "灯" → 灯.dim(30%) "高了" → 扫描栈顶 → 匹配 "温度" → 温度 > 阈值8.3 双轨货币兑换策略
决策:编译时标记,运行时隔离。
$():编译为数学指令序列{{}}:编译为 Python C API 调用或进程间通信- 中文语句:编译为言知 VM 指令
- 三种代码可互相调用,调用处做类型转换
8.4 自举优先级
决策:先自举语法分析部分,再逐步覆盖全部能力。
自举顺序: 1. parser(核心递归下降算法) 2. lexer(词法分析) 3. pre_tokenizer(无空格分词) 4. ast(节点定义) 5. evaluator(简单求值) 6. typechecker(可选) 7. expander、codegen 等九、风险与应对
| 风险 | 概率 | 影响 | 应对策略 |
|---|---|---|---|
| 自举中途无法通过自编译 | 中 | 高 | 分模块逐步自举,每一模块自举后立即验证 |
| 言律句式覆盖不够通用 | 低 | 中 | 句式宏开放给用户自定义,不硬编码在编译器 |
| VM 性能不如预期 | 中 | 中 | 保留 AST 求值器作为 fallback,VM 仅作为优化层 |
| 主题链补全过于复杂 | 中 | 中 | 限定上下文窗口大小为 3,复杂情况让用户显式指定 |
| Python 双轨引入安全风险 | 低 | 高 | {{}}默认禁用,需要--allow-python标志启用 |
十、总结
言知不是一个"新语言"。它是在问:如果汉语母语者不需要"思维翻译"就能写程序——这个语言该怎么设计?
zhixing 用代码回答了"可以这样做"——它是 Lisp 的中文化身,证明了中文关键字 + 动词运算符 + 管道可以写出图灵机、Brainfuck 解释器、快速排序。
yanplan / 言律用设计回答了"应该这样做"——它是汉语自然语句的编程表达,证明了 "当_就_" "天黑了。灯亮了。" 可以被精确解析为计算逻辑。
言知把两者合在一起,用 zhixing 的宏系统承载言律的自然语法,用 zhixing 的同像性实现"言即知,知即行"。
定言知=函心'言'行。(定义言知 = 把心里的"言"变成可执行的"行"。)
