版本:Cosat v0.1 | 状态:设计定案(含一项严重开放问题,见下)| 修订日期:2026-08-26
Cosat 是一门数据流范式的脚本语言(源文件扩展名 .cst):代码即数据从左向右的流动,语法的一切设计服务于"看清数据去了哪里"。
语言名 Cosat 取自 Courier(信使)与 Station(车站),意为"快递站"——数据如同包裹,沿链从左向右逐站投递,这正是全语言的核心隐喻。
# 定义 = 构造 + 流入 def;分支体泛化:常量分支免 lambda 包装
\ n => match n {
0 : 0
1 : 1
_ : (n - 1 -> @fib) + (n - 2 -> @fib)
} -> def fib;
10 -> @fib -> @print; # → 55
# 链上定义(tee):d 绑定后原值继续流
data -> def d -> match _ {…}, d -> @log;
# 循环:表达式体收集(map)、遍历带守卫(filter)
each nums { _ * 2 } -> def doubled;
each nums { _ > 0 : @print }
- 数据流高于一切——数据从左向右流动;
- 目的地殿后——值在前,目的地在后:
实参 -> 函数、值 -> def 名字; - 符号单一含义——每个符号只有一个语义、一个方向,不兼职;
- 角色不明则前缀声明——形参
\、调用@、占位_; - 歧义必须在文法层消灭——用结构区分语义,不依赖位置或语境;
- 接收点显式——链路中接收者必须自带显式、裸露、唯一的接收点。
完整公理与细节见 spec/00-总览-OVERVIEW.md。
arity 与点位校验:点位模型(公理 6、04-链模型 §5.1)要求每跳编译期校验「点位总数 = 上游参数数量」,其前提是接收者的形参数量(arity)静态可查——而查知目前只有「按名字找到定义」一条路。凡 callee 不是编译期可定位的定义名,arity 悬空:
| 形态 | 示例 | 现状 |
|---|---|---|
| 变量持函数 | @x(x 为形参 / 运行期值) |
05 §6.3 明文合法(高阶函数刚需),点位规则从未说明如何校验 |
| 成员访问 | @obj.method |
12-速查 有 ✓ 行,但 arity 无处可查 |
| 索引访问 | @xs[0]、@p["k"] |
数组/对象提案带入的新形态(proposals/) |
| 动态站点 | data -> (@@fn) |
「返回函数的形参表」运行期才知(05 §6.4 ❓) |
| 内置函数 | @print 等 |
无 Cosat 定义可查(05 §6.6 开放问题 6) |
此问题并非数组/对象提案引入:前两类形态在现行规范中已经存在,提案只是增添高频形态、把洞暴露到主路。波及面:04 §5.1「每跳编译期校验」的全称表述、公理 6 括注「(编译期校验)」、以及仅对具名 callee 成立的点位不匹配判定(如 12-速查 each xs { @twoArgFn } ✕)。
候选方向(均未定案):
- 静态/动态 arity 二分:静态可查者(具名定义 / 内联 lambda /
def/_/ 字面量)保留编译期校验;动态形态降级为运行期消费语义(接收者按实际形参数消耗,上游不足 = 运行时错误)。保持脚本定位,与「类型不可知处运行时兜底」的既有立场同族; - 从 v0.1 引入类型系统:根解——点位模型退化为类型检查的特例,此类问题消失,公理 6 措辞不动;但属语言定位变更(09 §9.1 明文立场部分作废,异构容器、无 nil、对象键与全部未决项须围绕类型系统重排)。
定案前任何 spec/ 改动须走公理修订流程(AGENTS.md 纪律 5)。
cosat-spec/
├── spec/ # 规范文档(00–12):规则;形式文法统一在 10
├── design/ # 设计动机与理由(与章节对应)
└── README.md
| 文档 | 内容 |
|---|---|
| 00-总览 | 定位、设计公理、文档索引 |
| 01-词法 | 词法元素、前缀空格规则、=> token |
| 02-符号 | 符号分工表、保留符号与符号禁区 |
| 03-运算符 | 优先级表、结构性前缀与函数声明优先级 |
| 04-链模型 | 链 = 值 段*、段判定、点位分配模型、_ 绑定模型 |
| 05-函数 | 定义与体边界、调用、@ 调用符、多返回值与参数重排、开放问题 |
| 06-匹配 | match/when 双构造、分支体泛化、全变体清单、三元待定 |
| 07-循环 | each/while 双构造(含遍历带守卫)、收集开关、循环与链 |
| 08-语句 | 语义分号、块值、出口纪律 |
| 09-数据类型 | 值域清单、number/string/boolean 语义、相等与运算符分派原则 |
| 10-文法 | EBNF 全量文法汇总(全仓唯一事实源) |
| 11-路线图 | 远期路线与实现顺序 |
| 12-速查 | 判定规则速查表 |
| rejected/ | 否决方案及原因、形态取代记录 |
设计动机、理由与否决论证存放于 design/。
推荐阅读顺序:00 → 02 → 04 → 05 → 06 → 07 → 08,随后 12 速查与 10 文法;需要追溯设计决策时查 design/ 与 rejected/。