Types 类Pascal语言中的类型等价

Types 类Pascal语言中的类型等价,types,pascal,modula-2,oberon,Types,Pascal,Modula 2,Oberon,Oberon-2语言报告“编程语言Oberon–2”在附录A中有以下定义: Ta和Tb类型的两个变量a和b的类型相同,如果 Ta和Tb都由相同的类型标识符表示,或 Ta在Ta=Tb形式的类型声明中声明为等于Tb,或 a和b出现在变量、记录字段或正式参数声明的同一标识符列表中,并且不是开放数组 给定类型声明 Ta = INTEGER Tb = INTEGER Tc = Tb 上述定义第二段表明: Ta和Tb是不同的类型(未声明Ta=Tb) Ta和Tc是不同的类型(未声明Ta=Tc)和 Tc和I

Oberon-2语言报告“编程语言Oberon–2”在附录A中有以下定义:

Ta和Tb类型的两个变量a和b的类型相同,如果

  • Ta和Tb都由相同的类型标识符表示,或
  • Ta在Ta=Tb形式的类型声明中声明为等于Tb,或
  • a和b出现在变量、记录字段或正式参数声明的同一标识符列表中,并且不是开放数组
  • 给定类型声明

    Ta = INTEGER
    Tb = INTEGER
    Tc = Tb
    
    上述定义第二段表明:

    • Ta和Tb是不同的类型(未声明Ta=Tb)
    • Ta和Tc是不同的类型(未声明Ta=Tc)和
    • Tc和INTEGER是不同的类型(没有声明Tc=INTEGER)

    这是Oberon-2中相同类型的正确解释吗?据我所知,Oberon-2在名称等效方面非常严格,在这种情况下,解释实际上是有意义的。那么标准Pascal和ISO Modula-2呢?

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

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

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