【问题标题】:Understanding Structural Equivalence理解结构对等
【发布时间】:2015-11-11 19:07:05
【问题描述】:

我有两种类型的结构等价想法我很难理解。

VAR_1 = int
VAR_2 = pointer to VAR_1

所以在这里,我觉得它们在结构上是等效的,因为从技术上讲,这些类型都指向整数类型,对吗?

但是如果你有类似的东西

VAR_3 = pointer to int

指向 int 和 integer 声明的指针是否使它们不等价?

我认为 VAR_1 和 VAR_2 在结构上是等效的,因为它们以正确的顺序包含相同的数据,但 VAR_3 失败了,因为它不需要是指针?

【问题讨论】:

    标签: compiler-construction computer-science structural-typing


    【解决方案1】:

    这完全取决于指针和 int 的概念是如何实现的,以及结构等价在您的特定场景中意味着什么。

    结构类型关注的是一个事物是否与另一个事物具有相同的结构,这意味着单个结构的实现非常重要。

    这是两种类型的快速伪代码定义。

    int definition
        32 bit value
    
    pointer definition
        32 bit value
    

    两种不同的类型,但它们包含完全相同的成员,尽管它们在语义上的处理方式不同(假定指针保存一个内存地址)。它们在结构上是等效的。

    这是另一个实现。

    int definition
        32 bit value
    
    pointer definition
        64 bit value
    

    尽管它们都有一个名为“value”的成员,但它们在结构上并不等价。这个怎么样?

    int definition
        value
        other value
    
    pointer definition
        other value
        value
    

    这些可能不被认为是相同的,因为成员的顺序不同,尽管它们的名称/类型相同。

    我的观点是,这完全取决于它所属的任何语言或环境的实现者,以及事物在那个世界中的含义。

    【讨论】:

      【解决方案2】:

      聚会迟到了,但我只想声明我不同意另一个答案。

      虽然语言实现细节很重要,但最终的结构等价不仅仅与分配给类型的字长有关。如果是这样,您甚至可以争辩说 floatint 在 C 中可以在结构上等效,因为可能某些 C 编译器使用具有相同长度的单词来实现它们。

      如果你仍然不相信,想想当你增加一个 pointer-to-int 和一个 int 时会发生什么。

      int p=100;
      int *q=100;
      p++;    //p = 101
      *q++;  // Pointer moves to the next int in memory adding int word length to the underlying stored value
      

      事实上,我认为类型系统与语言语义有更多的关系。 Pointer-to-int 语义不同于 C 中的 int 语义。因此这两种类型在结构上并不等价。

      要回答您的问题,VAR_1 和 VAR_2 在结构上并不等效(一个是 int,另一个是指向 int 的指针)。但是 VAR_2 和 VAR_3 在结构上是等价的。因为它们在 C 中指向相同的基本类型。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-27
        • 2021-12-05
        • 1970-01-01
        • 2015-02-07
        • 2012-11-27
        • 2021-10-10
        相关资源
        最近更新 更多