Skip to content

Latest commit

 

History

26 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Cosat 语言规范

版本: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 }

核心设计公理

  1. 数据流高于一切——数据从左向右流动;
  2. 目的地殿后——值在前,目的地在后:实参 -> 函数值 -> def 名字
  3. 符号单一含义——每个符号只有一个语义、一个方向,不兼职;
  4. 角色不明则前缀声明——形参 \、调用 @、占位 _
  5. 歧义必须在文法层消灭——用结构区分语义,不依赖位置或语境;
  6. 接收点显式——链路中接收者必须自带显式、裸露、唯一的接收点。

完整公理与细节见 spec/00-总览-OVERVIEW.md

⚠️ 已知严重开放问题(2026-08-26 发现,未定案)

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/

About

Cosat 编程语言官方规范:语法、语义与标准库定义

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors