Skip to content

可变状态语义

Semantics of mutable state · Store semantics

把位置到值的存储纳入配置并随求值更新的语义。

形式陈述

可变状态语言的运行状态通常写成配置 e,σ,其中存储 σ 是从位置到值的有限映射。求值关系同时变换表达式和存储,例如分配产生新位置 dom(σ),读取得到 σ(),写入把存储更新为 σ[v]。静态语义还需存储类型 Σ 记录每个位置的值类型,并证明配置归约保持 Γ;Σe:T,必要时允许新分配扩展 Σ

直觉

表达式的结果不再只由自身语法决定,还取决于一个持续演化的外部存储;位置是可共享的身份,而不是把值直接代入变量。

例子与边界

rs 指向同一位置,对 r := 1 的写入也改变随后读取 s 的结果,这就是别名。分配需选择新鲜位置,但具体地址通常只在重命名意义下重要。把赋值简单解释为变量替换会遗漏别名、求值顺序和生命周期。并发状态还需额外的内存模型与同步规则,不能由单线程存储语义自动推出。

推论与应用

状态语义支撑引用、数组、对象、闭包环境和命令式程序验证。它也是分离逻辑、效果系统、垃圾回收正确性以及状态 monad 等抽象的语义起点。

参考资料
  • Robert Harper, Practical Foundations for Programming Languages, 2nd ed., Cambridge University Press, 2016,Chs. 34–36, state, references, and store typing。
  • Glynn Winskel, The Formal Semantics of Programming Languages, MIT Press, 1993,Chs. 2–5, transition semantics with stores。