![]() |
1
48
注: Typestate已从Rust中删除,只剩下有限的版本(跟踪未初始化的和从变量中移动的)。请看我最后的便条。 背后的动机 类型状态 因此,我们的想法是创建简单的 这些谓词实际上并不是由编译器本身检查的,它可能过于繁重,相反,编译器只会根据图形进行推理。
请注意,类型
现在,让我们构建一些图表:
当然,当你有几种可能的路径时,情况会变得更复杂一些:
这表明您可以根据谓词集进行推理:
这可以通过函数的一般规则来补充:
因此是 类型状态 在里面 铁锈 :
注意,自从
铁锈
Typestate缺少的很简单:可组合性。
这意味着类型的谓词本身是无用的,实用程序来自注释函数。因此,在现有的代码库中引入一个新的谓词是一件令人厌烦的事情,因为需要对现有函数进行检查和调整,以解释它们是否需要/保留不变量。
|
![]() |
2
13
它基本上是类型的一个扩展,在这里,您不仅仅检查某些操作是否在一般情况下被允许,而是在这个特定的上下文中。所有这些都是在编译时完成的。 这个 original paper 实际上相当可读。 |
![]() |
3
4
有一个为Java编写的typestate检查器 Adam Warski's explanatory page |