是否有算法来确定某些命令性代码是否是引用透明的?

时间:2012-09-18 18:15:11

标签: compiler-construction functional-programming static-analysis

是否有一个算法可以在给定命令行代码(和周围程序)的X块的情况下确定该代码是否是引用透明的?

到目前为止我所拥有的是:

  

如果

,则一段代码为RT      
      
  1. 在控制流离开X后,没有读取分配给X的非参考变量

  2.   
  3. 可以证明在X中取消引用和分配的所有引用变量都是指遵循规则1的变量

  4.   
  5. 没有读取变量或调用函数,其值取决于运行时状态(即scanf()time()argv

  6.   

编辑:见评论

该算法的完美准确性不是绝对必要的,但它是优选的。 (这是现实生活,而不是CS课程,所以as that one guy says,“简单而不是正确稍微好一些。”)

编辑2:

没有引用或指针的简化语言的算法草图/想法,表示为抽象语法树:

  
      
  1. 查找因果对(即分配和使用变量)
  2.   
  3. 对于每一对,将AST中的父节点标记为非RT,最多不包括最低共同祖先。
  4.   

问题:如何处理初始化程序?他们算作作业吗?

1 个答案:

答案 0 :(得分:2)

您可能想要了解“效果系统”或“类型和效果系统”,它们是一种描述和跟踪计算所具有的副作用的机制。我不确定是否有任何系统能够进行推理而不是依赖效果注释,但至少你应该能够了解你必须担心的事情。