理解代码的操作和指称策略

主要观点:理解编程语言特性时,有操作解释(operational explanation)和指称解释(denotational explanation)两种,开始时用操作解释对初学者较易,长期看指称解释更有用,两者虽本质相同但质量不同,且这两种解释不仅对基本概念有用,对高级概念如类型类也适用。
关键信息:

  • 操作解释从程序执行角度解释特性,指称解释从对程序员的意义角度解释特性。
  • 以函数为例,先给出抽象定义,再用示例和求值过程进行操作解释,两者都在说函数可通过函数参数捕获变化部分以概括相关表达式。
  • 操作解释低层次,易让初学者跟随,但长期使用较繁琐;指称解释高层次,理解后更利于代码推理。
  • 以 Scala 的类型类为例,先解释given值和using参数,再给出指称解释即表达类型参数的约束。
    重要细节:
  • “denotational”和“operational”术语分别来自指称语义和操作语义,将其转化为更适合程序员的非正式方法。
  • 很难给出适合初学者的简洁精确的函数指称定义,很多课程存在不精确之处,如华盛顿大学课程和普林斯顿的 Python 课程。
  • 完整的替换过程示例在[Creative Scala]中。
阅读 7
0 条评论