管道算子 |> 设计稿(讨论稿,2026-09-02)
定位:语言核心·专题设计(无章号)。动机与决策链:Plan 514 W3 调研 (KNOWN-DEBT P514-W3-1)→ 用户裁定移除换行流式链糖(commit 9264344cf, 句首
.语句不再续接、旧形态报错)→ 多行链式调用需要显式替代语法。 本稿供讨论定稿,实施前需一次全语料词法冲突扫描。
1. 语法
二元中缀算子 |>,首版只做方法形:
auto
// 脱糖前 // 脱糖后(宿主 parser 层)
expr |> .m(args) expr.m(args)
expr |> .m(args) |> .n() expr.m(args).n() // 左结合多行形态(本设计的核心目的——显式续行,无歧义):
auto
let res = http.request("POST", url)
|> .header("Content-Type", "application/json")
|> .timeout(5000)
|> .send()行中形态同样合法(x |> .m() 单行),但不是存在理由。
函数形(二期,待真实用例再立项):expr |> f(a, b) ≡ f(expr, a, b)。 首版不做——方法形已覆盖被移除链糖的全部用例,函数形引入"首参注入"语义 争议(placeholder 形 f(_, a)?尾参形?),不值得抢跑。
2. 词法
新两字符 token |>(VBar 紧邻 Gt,贪婪匹配,镜像 ??/.?/..= 先例)。
冲突盘点(实施时须以全语料扫描证实零误伤):
|现役:is-臂 or-模式("a" | "b" ->,g02 语料依赖)、按位或。| >相邻仅在x | > y形下出现——or-臂后接比较的形态在语料中 不存在,扫描确认即可。>现役:比较。a |> b不会与a > b混淆(两字符整体识别)。
3. 语法与优先级
- 优先级:低于比较、高于赋值(
a |> .m() == b解析为(a.m()) == b; 与赋值同区但右结合性不适用)。 - 右操作数:按"原子 + 调用/字段/下标后缀链"解析,不吃低优先级二元。
- 左结合;左操作数任意表达式(含上一个
|>的结果)。
4. 脱糖层位与三后端
宿主 parser 脱糖为 Expr::Call(Dot(lhs, m), args)——AST 层零新节点:
- VM / 主 a2r:直接执行/发射既有方法调用形态,零新增路径。
- AA2R(a2r.at):token 层自解析,需在其 pratt 镜像同一脱糖 (含行首
|>续行);corpus_a2r 对拍覆盖对齐。
5. 兼容与迁移
- 与已移除链糖的关系:替代者;
9264344cf的报错文案 ("多行管道算子设计中")在本算子落地时更新为指向|>。 - 与
??/.?家族风格一致:短符号、脱糖语义、无类型系统介入。
6. 测试计划(实施时)
99_idiom2 探针增件(单行/多行/嵌套链/行首形态);corpus_a2r 增 g16_pipe_basic;aavm2 compile corpus 自然覆盖(lib 不使用则不阻塞)。
7. 未决问题
|> .field(字段投影形,≡expr.field)是否允许?倾向允许(零成本)。|>在 is-臂 / 闭包体内是否合法?倾向闭包体合法、is-臂内不建议。- 函数形最终形态与时机(二期)。
- 错误信息措辞更新(§5)随实施。