【问题标题】:Type equivalence in Pascal-like languages类 Pascal 语言中的类型等价
【发布时间】:2017-10-10 12:57:06
【问题描述】:

Oberon-2 语言报告“The Programming Language Oberon-2”在附录 A 中有以下定义:

两个变量ab,类型为TaTb 属于 同一类型 if

  1. TaTb 都表示通过相同的类型标识符,或
  2. Ta 被声明为等于 TbTa = Tb 形式的类型声明中,或
  3. ab 在变量、记录字段或形参声明中出现在同一个标​​识符列表中,并且不是开放数组。

给定类型声明

Ta = INTEGER
Tb = INTEGER
Tc = Tb

上述定义中的第二段表明

  • TaTb 是不同的类型(没有声明 Ta = Tb),
  • TaTc 是不同的类型(没有声明 Ta = Tc)和
  • Tc 和 INTEGER 是不同的类型(没有声明 Tc = INTEGER)。

这是对 Oberon-2 中相同类型的正确解释吗?据我了解,Oberon-2 在名称等效性方面非常严格,在这种情况下,这种解释实际上是有道理的。标准 Pascal 和 ISO Modula-2 怎么样?

【问题讨论】:

  • 在 Pascal 中,INTEGER 是预定义的类型标识符,因此 Ta、Tb 和 Tc 都将是相同的类型。我的猜测是 Oberon-2 也是如此。

标签: types pascal modula-2 oberon


【解决方案1】:

问题中相同类型的解释遵循所谓的严格名称等效。例如,在 Ada 中,此功能通过 派生类型 得到支持。在严格的名称等效下,每个类型声明都引入了不同的类型。然而,Pascal、Modula-2 和 Oberon 都使用非严格名称等效。这意味着对于类型标识符 Ta,声明 Tb em> = TaTc = Ta 使 Tb sub> 和 Tc 等效。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 2013-02-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多