主要观点:理解编程语言特性时,有操作解释(operational explanation)和指称解释(denotational explanation)两种,开始时用操作解释对初学者较易,长期看指称解释更有用,两者虽本质相同但质量不同,且这两种解释不仅对基本概念有用,对高级概念如类型类也适用。
关键信息:
- 操作解释从程序执行角度解释特性,指称解释从对程序员的意义角度解释特性。
- 以函数为例,先给出抽象定义,再用示例和求值过程进行操作解释,两者都在说函数可通过函数参数捕获变化部分以概括相关表达式。
- 操作解释低层次,易让初学者跟随,但长期使用较繁琐;指称解释高层次,理解后更利于代码推理。
- 以 Scala 的类型类为例,先解释
given
值和using
参数,再给出指称解释即表达类型参数的约束。
重要细节: - “denotational”和“operational”术语分别来自指称语义和操作语义,将其转化为更适合程序员的非正式方法。
- 很难给出适合初学者的简洁精确的函数指称定义,很多课程存在不精确之处,如华盛顿大学课程和普林斯顿的 Python 课程。
- 完整的替换过程示例在[Creative Scala]中。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。