帮助理解类型系统的学术符号

时间:2009-02-12 01:41:51

标签: java

我正在尝试理解有关编程语言设计的academic paper(pdf)。特别是,它描述了一个名为Featherweight Java的轻量级Java。它的输入规则带有如下符号:

x_ : C_, this : C |- e0 : E0         E0 <: C0
class C extends D {...}
if mtype(m,D) = D_->D0, then C_ = D_ and C0 = D0
---------------------------------------------------------------------------
C0 m(C_ x_){ return e0; } OK IN C

无论如何,这是我在文本中再现它的最佳尝试。然而,该论文似乎假设这种符号是熟​​悉的,并且几乎没有解释它。有人能指出我更好的解释方向吗?谢谢!

3 个答案:

答案 0 :(得分:5)

这是一个特别复杂的例子,里面发生了一些不同的事情。

水平条记法通常用于推理规则。在线上方是前提(通常在一条线上用空格分隔),在线下面是一个结论。如,

P0   P1   ...   Pn
------------------
        C

表示“如果P0Pn全部成立,那么我们可能会认为C也有效。”

旋转门符号(⊦)通常用于蕴涵关系。在类型系统中,这通常意味着“如果我们假设左侧的类型,我们可以在右侧推导出类型。”冒号通常用于将变量或表达式与类型相关联,因此

x_ : C_, this : C ⊦ e0 : E0

表示“假设x_的类型为C_this的类型为C,我们可以推导e0的类型为E0。” ¹

符号<:通常用于子类型关系,但在文章中明确定义。

class C extends D”位似乎指的是源程序的语法。即,预期的前提是“C被明确声明为扩展D”。

如果没有涉及到纸张,其余部分很难理解。我衷心地将诺曼·拉姆齐的推荐Pierce作为对类型理论的一个很好的介绍。

¹请注意,“推理”和“蕴涵”之间的区别要么是微妙的要么是不存在的 - 哪个用于惯例,品味和/或细微差别。

答案 1 :(得分:2)

Benjamin Pierce的本科教科书Types and Programming Languages将教你理解羽量级Java论文中使用的符号所需要知道的一切。 (我认为皮尔斯也可能是该论文的合着者。)

答案 2 :(得分:-1)

看起来像formal semantics,在这种情况下语法可能是denotational semantics,但有些符号看起来非常神秘。