是否有一个算法可以在给定命令行代码(和周围程序)的X
块的情况下确定该代码是否是引用透明的?
到目前为止我所拥有的是:
如果
,则一段代码为RT
在控制流离开X后,没有读取分配给X的非参考变量
可以证明在X中取消引用和分配的所有引用变量都是指遵循规则1的变量
- 醇>
没有读取变量或调用函数,其值取决于运行时状态(即
scanf()
,time()
,argv
)
编辑:见评论
该算法的完美准确性不是绝对必要的,但它是优选的。 (这是现实生活,而不是CS课程,所以as that one guy says,“简单而不是正确稍微好一些。”)
编辑2:
没有引用或指针的简化语言的算法草图/想法,表示为抽象语法树:
- 查找因果对(即分配和使用变量)
- 对于每一对,将AST中的父节点标记为非RT,最多不包括最低共同祖先。
醇>
问题:如何处理初始化程序?他们算作作业吗?
答案 0 :(得分:2)
您可能想要了解“效果系统”或“类型和效果系统”,它们是一种描述和跟踪计算所具有的副作用的机制。我不确定是否有任何系统能够进行推理而不是依赖效果注释,但至少你应该能够了解你必须担心的事情。