标量值
| 原语 | 用途 | 当前状态 |
|---|---|---|
Bool | 条件判断与逻辑结果。if 和 while 条件仅接受 Bool 类型。 | 可运行 |
i8 i16 i32 i64 | 有符号定宽整数。 | 可运行 |
u8 u16 u32 u64 | 无符号定宽整数。 | 可运行 |
usize isize | 指针大小的整数。 | 可运行 |
f32 f64 | 浮点数值。 | 可运行 |
char | 字节大小的字符值,用于 ASCII/解析器/编解码类工作。 | 可运行 |
String | 字符串字面量和当前 I/O 示例所使用的文本值。 | 可运行 |
Void | 不产生有用值的函数的返回类型。 | 可运行 |
整数字面量支持十进制、十六进制、二进制、八进制、_ 分隔符,以及可选的后缀(如 _u8 或 _usize)。
let count u32 0x12c_u32let byte u8 255let page usize 4_096原语数值类型不会隐式收窄、拓宽或更改符号性。当转换是有意为之时,请使用显式类型转换。
let count u32 300let byte u8 count as u8let whole i32 7.9 as i32let marker u8 'A' as u8缺失与可失败性
Maybe<T> 表示可选值。仅当期望类型已知为 Maybe<T> 时,才接受 null。
let name Maybe<String> nulllet fallback name else "world"可失败函数以 ! 或 ![...] 标记,check 用于传播当前错误。可失败性是函数签名的一部分,而非运行时异常机制。
原生编译器接受用户定义可失败函数的显式错误集。
fn validate i32 ok Bool ![InvalidInput] if == ok false raise InvalidInput ret 42 fn run Void ![InvalidInput] check validate true原生编译器将 Maybe<T> 上的 check 降低为针对第一个可恢复辅助切片的直接分支。Maybe 检查失败时返回函数的默认失败值,不涉及异常或展开。
用户定义的错误流仅当函数实际引发命名错误时,才会降低为小型状态/结果结构体。
内存与所有权
Zero 使内存布局在类型中可见。以下形式是原语类型构造器,因为它们影响所有权、借用、布局和清理。
| 原语 | 用途 |
|---|---|
[N]T | 包含 N 个 T 元素的固定大小数组。 |
Span<T> | 非拥有指针加长度。 |
ref<T> | 非拥有共享引用。 |
mutref<T> | 非拥有可变引用。 |
owned<T> | 仅可移动的值,拥有清理责任。 |
const T | T 的只读视图。 |
type BufferView bytes Span<u8> owner Maybe<mutref<Alloc>> pub fn len usize view BufferView ret std.mem.len view.bytesAlloc 是分配 API 所使用的能力类型。堆分配应在函数参数和文档中可见;不存在隐藏的全局分配器。
分配器原语是显式句柄:
| 原语 | 行为 |
|---|---|
NullAlloc | 始终报告分配失败,可用于证明某条路径不会进行分配。 |
FixedBufAlloc | 从调用者拥有的可变字节中分配,返回借用的 MutSpan<u8> 视图。 |
std.mem.arena(buffer) | 基于调用者存储的竞技场式固定缓冲区分配。 |
PageAlloc, GeneralAlloc | 显式句柄,非环境全局堆。 |
std.mem.byteBuf(alloc, len) | 返回由显式调用者存储支持的 Maybe<owned<ByteBuf>>。 |
借用表达式创建引用时不涉及分配或运行时元数据。使用 &value 获取 ref<T>,使用 &mut value 获取 mutref<T>。
fn read_x i32 point ref<Point> ret point.x fn write_x Void point mutref<Point> value i32 set point.x value let shared &pointwrite_x (&mut point) 5当 T 定义了规范的非抛出方法 fn drop Void self mutref<Self> 时,owned<T> 局部变量在词法作用域退出时自动清理。
清理被降低为直接调用,并且一旦拥有的绑定已被移动,清理即被跳过。
type Temp bytes MutSpan<u8> fn drop Void self mutref<Self> set self.bytes[0] 0布局原语
用户定义的类型不是原语,但某些布局标记是原语,因为它们定义了值如何跨越 ABI 或二进制边界。
| 形式 | 用途 |
|---|---|
type | 默认 Zero 聚合布局。默认不保证 ABI 稳定性。 |
extern type | 针对所选目标的 C ABI 兼容聚合布局。 |
packed type | 具有声明字段宽度的位精确布局。 |
enum Name : uN | 具有显式整数底层类型的枚举。 |
choice | 带标签的选择值。要求穷尽匹配。 |
extern type CPoint x i32 y i32 enum Color u8 red green blue能力名称不是原语
World、Fs、Net、Env、Args、Clock、Rand 和 Proc 等名称是能力接口。
它们是 Zero 效果模型的基础,但它们不是与 Bool、u32、Maybe<T> 或 Span<T> 同意义上的原语值。
pub fn main Void world World ! check world.out.write "hello\n"当前原生状态
原生编译器当前支持:
- 带检查的原语整数宽度和精确的 C 整数类型
- 原语整数、浮点数和字节
char之间的显式类型转换 - 面向内存的泛型形式
Maybe<T>和 span 视图的原生布局- 源码级
ref<T>和mutref<T>借用 owned<T>的词法移动- 活跃拥有局部变量的直接
drop清理调用 - 编译器已知的
owned<File>清理 - 通过
NullAlloc、可变FixedBufAlloc和ByteBuf进行的分配
这些所有权特性均不增加运行时所有权机制。
不属于当前原生状态的内容:
f16- Unicode 标量字符处理
- 更完善的借用和别名分析
Arena和通用分配器行为- 泛型容器的 drop 胶水代码
- 跨目标 ABI 更穷尽的布局一致性