Compiler construction 为什么Wasm GC设计要解决类型相等、标记、子类型和方法等问题?

Compiler construction 为什么Wasm GC设计要解决类型相等、标记、子类型和方法等问题?,compiler-construction,garbage-collection,programming-languages,webassembly,Compiler Construction,Garbage Collection,Programming Languages,Webassembly,我注意到这本书讲了很多关于类型、标记、子类型、可变性、类型等价性和方法的内容 摘录: 为了避免模块边界上虚假的类型不兼容,所有类型都是结构化的。当聚合类型的定义展开为…时,它们被认为是等价的。这是“等递归”类型的递归结构等价的标准定义 希望将对象表示为结构,其第一个字段是方法表 虽然实际版本中没有提到任何方法或标记,但这些概念似乎对设计非常重要 为什么??特别是:为什么设计对类型平等有复杂的看法?这里是GC提案的所有者 我不能完全肯定你到底在问什么。Wasm是类型化的,所以很明显,提案

我注意到这本书讲了很多关于类型、标记、子类型、可变性、类型等价性和方法的内容

摘录:

  • 为了避免模块边界上虚假的类型不兼容,所有类型都是结构化的。当聚合类型的定义展开为…时,它们被认为是等价的。这是“等递归”类型的递归结构等价的标准定义

  • 希望将对象表示为结构,其第一个字段是方法表
虽然实际版本中没有提到任何方法或标记,但这些概念似乎对设计非常重要


为什么??特别是:为什么设计对类型平等有复杂的看法?

这里是GC提案的所有者

我不能完全肯定你到底在问什么。Wasm是类型化的,所以很明显,提案需要定义什么类型是相等的,或者当一个类型是另一个类型的子类型时。这决定了哪些程序有效,哪些不有效。规则必须是健全的,以防止安全违规,而无需运行时检查。对于类型等价,我们只建议使用规范的、最允许的语义,对于子类型也是如此。此外,为了在实践中获得有用的子类型,生产者需要能够限制允许变异的位置,因为例如可变字段不能完全允许子类型

事实证明,围绕通用GCed数据类型适当设计和制定类型规则实际上比定义它们的操作行为要复杂得多——这相当简单,并且符合您的预期


GC扩展不包括任何类似方法或方法表的基本特性。然而,这是一个重要的设计目标,即这些概念可以用提案提供的内容来表达,因为我们希望支持具有这些概念的语言的编译。

IMHO您可能不想在SO中询问有关此提案的问题,而是在github问题页面或其任何其他官方讨论渠道中询问。用于Wasm的GC正在进行大量开发,没有稳定的实现,也没有稳定的规范。当一个稳定的规范出来时,你的问题和任何问题的答案都可能很快过时。谢谢!我对这个领域知之甚少,所以也不知道我在问什么,但这个建议似乎很有趣。这听起来非常困难:提出一个编译目标,对于几乎任何GCd语言都是有效的。