关键字¶
关键字与保留字:
- 所有关键字都是保留字。
- 额外预留一些容易造成歧义的名称(如
i0i999999等)为保留字。
变量声明与初始化¶
| 关键字 | 全称 | 用法 |
|---|---|---|
| var | variable | 声明完全可变变量(隐含 mut) |
| val | value | 声明逻辑不可变变量 |
| imv | immutable variable | 声明物理不可变变量(隐含 imm) |
| ref | reference | 声明引用变量 |
| lit | literal | 声明编译期常量 |
| fin | final variable | 声明禁止重新绑定的变量 |
| late | late | 标记变量为手动延迟初始化 |
| lazy | lazy | 标记变量为懒加载初始化 |
| volatile | volatile | 声明变量可被外部修改,禁止编译器缓存优化 |
| restrict | restrict | 指针限定符 |
| let | expression | 定义表达式 |
| obj | dynamically typed variable | 声明或定义动态类型变量 |
关键字来源
var和val来自 Kotlin,分别表示可变和不可变变量。late和lazy来自 Kotlin 的lateinit和by lazy,分别表示手动延迟初始化和懒加载初始化。restrict来自 C99 的restrict关键字,用于指针限定。
函数与纯度¶
| 关键字 | 全称 | 用法 |
|---|---|---|
| def | define | 定义纯函数 |
| fun | function | 定义逻辑纯函数 |
| obs | observe | 定义观测性函数(有副作用但不影响调用方计算结果) |
| act | action | 定义副作用函数 |
| once? | once (soft) | 修饰 act,再次调用时忽略 |
| once! | once (strict) | 修饰 act,再次调用时报错 |
| effectful | effectful | 修饰 fun,声明可回滚副作用(需权限列表与回滚块) |
| ovl | overload | 标记函数允许重载(所有重载变体均需标记) |
| where | where | 对函数参数或泛型进行范围限定 |
| rollback | rollback | 在 effectful fun 后声明回滚逻辑 |
关键字来源
def来自数学上的函数定义,强调纯函数的概念。fun来自大多数编程语言使用的 "function" 一词,表示一般函数。act来自 "action",强调具有副作用的函数,由生成式 AI 推荐我使用。
实际上最早采用的是来自 Rust 的
fn,但后来由于分成了三类,就改成了现在的def、fun和act。
异步与等待¶
| 关键字 | 全称 | 用法 |
|---|---|---|
| async | async | 异步函数修饰 |
| await | await | 异步等待 |
权限与效应¶
| 关键字 | 全称 | 用法 |
|---|---|---|
| permission | permission | 定义权限 |
| aka | aka | 权限别名 |
| perm | perm | 声明上下文批量权限块 |
| yields | yields | 权限传播 |
类型与访问修饰符¶
| 关键字 | 全称 | 用法 |
|---|---|---|
| pub | public | 成员可见性:公共 |
| prv | private | 成员可见性:私有 |
| mut | mutable | 类型修饰:完全可变 |
| imm | immutable | 类型修饰:物理不可变 |
| ro | read-only | 访问修饰:只读 |
| wo | write-only | 访问修饰:只写 |
| rw | read-write | 访问修饰:读写 |
| rx | read-execute | 访问修饰:读执行 |
注意:
var隐含了mut,imv隐含了imm。在声明变量时重复使用这些修饰符(如var mut)会导致编译错误。
类型与单位¶
| 关键字 | 全称 | 用法 |
|---|---|---|
| unit | unit | 空类型;同时也是其值字面量 |
| measure | measure | 定义量纲 |
内置类型¶
| 关键字 | 用法 |
|---|---|
| bool | 布尔类型 |
| flag | 标志位类型 |
| byte | 字节类型 |
| char | Unicode 字符 |
| ascii | ASCII 字符 |
| char8/16/32 | 字符类型 |
| str | 字符串 |
| str8/16/32 | UTF 编码字符串 |
| cstr / cstr8/16/32 | C 字符串 / UTF 编码 C 字符串 |
| bytes | 字节数组 |
| int / uint | 编译期整数 |
| float | 编译期浮点 |
| i8/16/32/64 ... | 整数类型 |
| u8/16/32/64 ... | 无符号整数 |
| f16/32/64/128 | 浮点类型 |
| usize/isize | 平台字长整数 |
| b8/16/32/64 ... | 二进制类型 |
| flag8/16/32/64 ... | 标志位类型 |
| byte1/2/4/8 ... | 字节类型扩展 |
| iN / uN / fN | 位宽扩展类型 |
| Xle / Xbe | 小端类型 / 大端类型 |
注意:
[iuf][0-9]+[a-z]*均为保留字,不能用作标识符。
关键字来源
bool、char、str来自大多数编程语言的内置类型。flag来自常用的标志位类型,通常用于位掩码。cstr来自 C 语言的字符串类型。iN、uN、fN来自古早的位宽类型命名习惯。le和be后缀来自于小端和大端字节序的缩写。unit来自于函数式编程语言中的空类型概念,表示没有有意义的值。
字面量¶
| 关键字 | 用法 |
|---|---|
| unit | unit 类型的值字面量 |
| true / false | bool 真值 / 假值 字面量 |
| on / off | flag 置位 / 清位 字面量 |
| null | 可空指针的空值字面量 |
| none | 可选值的缺席字面量 |
控制流程与逻辑¶
| 关键字 | 全称 | 用法 |
|---|---|---|
| if | if | 条件分支 |
| else | else | 否则 |
| elif | else if | 否则如果 |
| then | then | 条件成立时执行 |
| switch | switch | 多分支选择 |
| match | match | 模式匹配 |
| for | for loop | 循环 |
| while | while loop | 循环 |
| do | do while loop | 循环 |
| break | break | 跳出循环 |
| continue | continue | 跳过本次循环 |
| leave | leave | 跳出当前块(如 switch) |
| fallthrough | fallthrough | 跳到下一个 switch 条件块 |
| goto | goto | 跳转 |
| return | return | 返回 |
| broken | broken | 循环中断分支 |
| completed | completed | 循环完成分支 |
异常与错误处理¶
| 关键字 | 全称 | 用法 |
|---|---|---|
| try | try | 尝试块 |
| catch | catch | 捕获块 |
| or | or | 异常分支 |
| throw | throw | 抛出异常 |
类型转换与判断¶
| 关键字 | 全称 | 用法 |
|---|---|---|
| as | as | 类型转换 |
| in | in | 遍历循环(for x in 容器);单位换算 |
| is | is | 类型或状态判断 |
断言与静态检查¶
| 关键字 | 全称 | 用法 |
|---|---|---|
| assert | assert | 断言检查 |
| assume | assume | 静态假设条件成立 |
泛型与模板¶
| 关键字 | 全称 | 用法 |
|---|---|---|
| template | template | 模板/泛型声明 |
| typename | typename | 类型参数 |
| variant | variant | 代数类型 |
类型类别¶
| 关键字 | 全称 | 用法 |
|---|---|---|
| inttype | inttype | 整数类型类别 |
| floattype | floattype | 浮点类型类别 |
| numtype | numtype | 数字类型类别 |
语法辅助与保留¶
| 关键字 | 全称 | 用法 |
|---|---|---|
| with | with | 临时变量;捕获列表语法 |
| from | from | 语法辅助/预留 |
| to | to | 语法辅助/预留 |
| using | using | 语法辅助/预留 |
| of | of | 语法辅助/预留 |
| by | by | 枚举值类型约束 |
模块与结构¶
| 关键字 | 全称 | 用法 |
|---|---|---|
| namespace | namespace | 命名空间 |
| use | use | 导入模块或定义别名 |
| struct | struct | 结构体 |
| class | class | 类 |
| enum | enum | 枚举 |
| union | union | 联合体 |
| impl | implement | 实现接口或方法 |
| initvar | initvar | 变量列表初始化钩子 |
相关内容:语法总览见 语法。