X
给定一大块命令式代码(和周围的程序),是否有一种算法可以确定该代码是否是引用透明的?
到目前为止,我所拥有的是:
一段代码是 RT 如果
在控制流离开 X 后,不会读取在 X 中分配给的非参考变量
所有在 X 中被取消引用和分配的引用变量都可以证明是引用遵循规则 1 的变量
不读取变量或调用函数,其值取决于运行时状态(即
scanf()
,time()
,argv
)
编辑:见评论
该算法的完美准确性不是绝对必要的,但它是可取的。(这是现实生活,不是 CS 课,所以有人说,“简单比正确要好一些。”)
编辑2:
没有引用或指针的简化语言的算法草图/想法,表示为抽象语法树:
- 查找因果对(即变量的分配和使用)
- 对于每一对,将 AST 中的父节点标记为非 RT,直到但不包括最低的共同祖先。
问题:初始化器怎么办?它们算作作业吗?