Chiba Level 1 Spec Outline
THIS SPEC IS ONLY DRAFT, AND WRITTEN IN CHINESE YOU MIGHT NEED TRANSLATOR IF ENGLISH IS YOUR MAJOR LANGUAGE.
AFTER THE FIRST RELEASE THE SPEC WILL BE IN ENGLISH.
0. 使用约定
- [x]:当前实现里已经有 parser / lowering / typecheck / test 证据。
- [-]:当前实现和
CHIBA-SPEC/ 旧设计有偏差,需要单独写清楚。 - [ ]:在 TODO / 设计里明确出现,但当前实现尚不完整。
1. 核心语言总目录
- 源文件编码、空白、换行、注释
- 关键字集合
- 标识符与 namespace path
- 数字字面量
- 十进制
- 十六进制
- 八进制
- 二进制
- 布尔字面量
- 字符串字面量
-
c"..."字面量 - atom / symbol literal(
:tag) - 标点与分隔符
- 运算符集合与词法歧义
:vs:atom*的多重含义(tuple / grouped expr / lambda 的歧义入口
- 表达式优先级与结合性
- file attrs
#![Metal]#![CBI]
-
namespace- 文件头
namespace x.y.z - inline
namespace x.y.z { ... }
- 文件头
-
use- 单项导入
- multi import
- glob import
- item attrs
#[entry]- 参数化形式属于同一套 item attrs
- 统一覆盖函数、stmt/expr、field、data variant、variant tuple type、namespace、block/unsafe block、lambda、trailing closure
-
def- 普通函数定义
extern形式
- 顶层静态值定义
- method-style
def Type.method(...) -
type -
data -
union -
private - public/private 的精确定义与跨 namespace 可见性
- block 是表达式
- block tail expression
- 表达式语句
-
letlet x = exprlet x: T = expr
-
letdestruct- tuple destruct
- record destruct
- [-]
let支持的 pattern 子集- 哪些 pattern 可 parse
- 哪些 pattern 可 lower
- level-1
let支持 tuple / record destruct 的 DFT pattern,嵌套深度任意 - 合法
let不发生运行期匹配失败,类型检查先拒绝不合法 destruct
- [-] constructor / literal pattern 不进入
let - record destruct in
let - [-] nested destruct pattern
let支持 tuple / record destruct 的 DFT pattern,嵌套深度任意if let支持 DFT pattern,嵌套深度任意
-
returnreturn不能省略值,unit也写return ()
-
;在 block / statement 序列里的地位;是显式分隔符(ws|nl)*也可作为分隔符- 不把
;当作额外语义节点
2. 控制流
-
if { } else { } -
if else if -
if else if let -
if let- level-1
if let支持 DFT pattern,嵌套深度任意 - 承担 constructor / literal pattern 的 refutable 匹配
- level-1
- [-]
else是否总是必需if let必须带else
-
match- level-1
match支持 DFT pattern,嵌套深度任意 - 承担 constructor / literal pattern 的主要匹配职责
- level-1
- exhaustiveness 规则
- pattern guard
-
for { ... }- 允许
for :tag { ... }
- 允许
-
for cond { ... }- 允许
for :tag cond { ... }
- 允许
-
break- 允许
break :tag
- 允许
-
continue- 允许
continue :tag
- 允许
-
for的 desugar / lowering 语义 -
reset -
shift -
reset/shift的 answer type checking - continuation 捕获与恢复时的 answer type 一致性
- delimited continuation 的正式语义
3 内存管理与生命周期
- level-1 managed object model
- 普通值默认是 managed value
- 普通
data/ tuple / record / closure env 的默认存储语义 -
Ptr[T] -
Ref[T] -
UnsafeRef[T] - level-1 区分值类型与引用类型
- uniqueness 作为编译器内部事实,而不是用户必写注解
-
Ptr[T]/Ref[T]/UnsafeRef[T]的关系 -
Ptr[T]与 FFI / Metal / ABI 边界 -
Ref[T]的读写与受控可变性 -
Ref[T]与send -
#[sync]- 不进入 level-1 首发
-
send标注 - world 边界上的对象传递
-
reset作为 arena 边界 - 普通函数调用蕴含隐式
reset - closure 调用蕴含隐式
reset - 值跨出当前
reset的 escape 语义return- closure capture
- 存入更长生命周期对象
send
- callee
reset/ callerreset/ heap 之间的提升规则 - continuation / answer type 与 arena 边界的关系
- arena / escape / RC / uniqueness / FBIP 在 level-1 的最小承诺
- level-1 内存管理与
chiba2.md长期路线图的关系
4. 模式(Pattern)
- wildcard pattern
_是 wildcard,不是 variable
- var pattern
- tuple pattern
- literal pattern
- int
- bool
- constructor pattern
- at pattern
name@pattern - [-] pattern 在不同位置的支持矩阵
matchif letlet- function parameter
match/let/if let支持 DFT pattern- function parameter 另行收紧
- record pattern
- [-] nested pattern
match/let/if let支持任意深度- parameter 另行收紧
5. 表达式
- 变量引用
- block expression
- tuple literal
- 1-tuple literal
(a,) - grouped expr
(a) - slice literal
- record literal
- record update
- 复用现有
{base | field: value}语法
- 复用现有
- function call
- field access
- indexing
- postfix deref
.* - cast
as - lambda
- trailing closure
-
unsafe { ... }- level-1 首发明确是 unsafe block
- inline
asm - [-] asm 输入/输出 tuple 语义
- pipe
|>- 支持单个
_作为孔位 - 倒数第三弱优先级
- 支持单个
- method call surface syntax
- named arguments
- 不进入,且不作为后续方向
- interpolation / format string
6. 运算符
- 算术运算
+ - * / %
- 比较运算
== != < <= > >=
- 逻辑运算
&& || !
- 位运算
& | ^ << >>
- 一元运算
-!*deref
- [-]
&address-of / ref story- level-1 去掉
&作为 ref 开口
- level-1 去掉
-
:=与 Ref 相关语义- 返回右侧值,可 chain
- 倒数第二弱优先级
- [-]
=绑定/定义语法- 最弱,但不作为普通 operator
- operator overload protocol
- infix
- prefix
- postfix
.*
- [-] 各运算符在 parser / typecheck / lowering 中的统一定义
7. 函数、闭包与调用约定
- 普通函数
- 普通函数体的隐式
reset - lambda / closure
- closure body 的隐式
reset - closure capture 语义
-
return作为 escape 点 - closure env 的分配与提升
- 返回值不能引用 callee 局部 arena 的规则
- method call
- method receiver 规则
-
def Type.method(...) - method resolution
- operator overload 与 method 的关系
-
extern "c" -
extern "cbx" -
extern "syscall"的现状- 已删除
-
#[entry] - 局部
def- 不支持,使用 lambda
- namespace block 内的 item 定义
8. 字面量与数据表示
- int literal 的 base 与后缀处理
- bool literal
- unit literal
- string literal
- cstr literal
- symbol literal
- tuple value representation
- string literal protocol
- string literal handler
#[string_literal("x")]
-
literal_prefix(#*)"..."(#*) - raw string
- multiline string
- string interpolation
- [-] bool / unit / tuple / ADT 的 runtime 表示
- float literal
- array literal 的正式语义
9. 字符串、str、cstr、String
-
str/cstr/String的语法面 -
c"..."与 ABI 边界 -
String -> cstr - 除
c""外的字符串字面量 desugar 为函数调用 - prefix string handler resolution
- raw / non-raw 与 interpolation 的组合规则
- 标准字符串允许多行
- 去掉
mk_str(...)/mk_cstr_view(...)/strlen(...)的用户语言地位 - 字符串相关 API 改为 method surface
- [-]
str/cstr/String的所有权与借用边界 - [-]
mk_str(...)/mk_cstr_view(...)/strlen(...)的规范地位 - 字符串 escape / raw string / multiline string 的正式定义
- UTF-8 语义与 codepoint 级规则
10. IR 与 Lowering
- CIR 的角色与 CPS 地位
- AST → CIR lowering 总述
- BIR 的角色与抽象机地位
- CIR → BIR lowering contract
- LIR 的定位与 BIR → LIR contract
- pass placement 与层边界细化
chibalex 语言大纲
-
.chibalex文件结构 - header / footer block
- charclass 定义
- macro 定义
- token rule
- action 原文透传
- built-in character classes
- regex 依赖面
- [-] UTF-8 / codepoint 语义与 regex engine 的对应关系
- 作为 project phase 自动接入
chibacc 语言大纲
-
.chibacc文件结构 - header / footer block
-
start - 普通
rule -
Alt / Seq / Quantifier / Group - label binding
-
=> action -
?predicate(...) - Pratt block
- prefix
- infix
- postfix
- runtime fallback / generated runner
- recovery
- item-level
- nested rule
- list separator / closing token / stmt-level 样例
- prediction / optimization(M5)
Level 2 预留
- interface
- Go-like interface method set
- namespace 作为 implementation bundle
-
via ns.path作为显式实现来源选择 - interface method 的 local HM 翻译
-
dyn Interface与动态分发对象