Chiba Logo CHIBA v0.6.13
CHIBA blog RSS feed
CHIBA / DOCS / LEVEL-1 SPEC

`Ref[T]` 的读写与受控可变性

这里集中展示 CHIBA level-1 specification,覆盖 core language、control flow、memory、patterns、IR lowering 与 package system 等实现边界。

The docs surface keeps CHIBA level-1 specification pages browsable inside the site, with direct paths into language, control flow, memory, pattern, and lowering rules.

Ref[T] 的读写与受控可变性

语法

该条目描述 Ref[T] 的 surface 读写操作与方法面。

语义

Ref[T] 应明确区分:

  • 读取当前值
  • 覆写当前值
  • 可变性是否需要线性或单线程约束

level-1 中,Ref[T] 的读写属于受控可变性操作;它不是普通值解构,也不是裸指针写内存。

Ref[T] 的 surface 可通过既定方法面或赋值协议暴露,但其核心语义始终是“在单 world 内读/写一个受控 cell”。

level-1 采用赋值协议作为核心规则:

lhs : Ref[T]
rhs : T
----------------
lhs := rhs : T

:= 更新左侧 cell 后返回右侧值,因此允许右结合 chain。

字段更新不是普通 record 的 internal mutability。若 a : Ref[row],则:

a.b := c

语义等价于:

a := { a.* | b: c }

实现可以在 uniqueness / escape 允许时把它 lower 成 inplace update,但规范语义是 whole-value replacement。

下标更新也不让 Array[T] 获得 internal mutability。expr[idx] := value 只有在 expr[idx] : Ref[T] 时合法。

因此:

let xs: Ref[Array[i64]] = cell
// xs[0] := 1    // error
xs := array_set(xs.*, 0, 1)

let cells: Array[Ref[i64]] = ...
cells[0] := 1    // ok

Usage

let r: Ref[i32] = cell
let x = r.*
r := x + 1

注释:这里的 get / set 只是说明读写是显式受控操作;具体 surface 可继续细化,但不能把 Ref 降格成普通值或裸地址。

边界

读写表面可以继续补充方法形式,但不改变 Ref[T] 的单 world 受控可变性定位,也不改变 Array[T] 无 safe internal mutability 的规则。