OCaml、Scala 和 Go 的结构类型实现

Posted

技术标签:

【中文标题】OCaml、Scala 和 Go 的结构类型实现【英文标题】:Structural typing implementation of OCaml, Scala, and Go 【发布时间】:2013-02-23 08:48:55 【问题描述】:

在研究结构类型时,我发现以下帖子描述了how interfaces in Go are translated to method lookup tables at runtime。帖子中描述的过程似乎与为 Scala 的可选结构类型系统和 Java 语言的 White Oak 扩展描述的 reflective and generative techniques 大不相同。

是否有任何深入的资源来讨论如何在 OCaml 中实现结构化类型?我对任何关于优化或与标称类型系统的运行时性能比较的讨论特别感兴趣。

【问题讨论】:

【参考方案1】:

您可以在 Jake Donham 的 this blog post 中找到关于 OCaml 对象内部的相当详细的描述。它的要点是对象支持主要实现为an internal library,编译器本身只有一点逻辑(当然还有类型系统中的对象类型逻辑),主要是围绕高效的消息分发。

我不是这部分语言的专家,但经过粗略检查后,看起来 OCaml 依赖于排序方法类型(解析为方法表中的槽)中的方法查找,并为方法提供缓存最后调用,以及静态已知调用的优化,特别是方法实现中的自调用。最后,对一些常用函数(例如实例变量 getter 和 setter)进行识别和编码(在内部 OO 库中键入 impl),以提高性能,并且可能更重要的是减少代码大小。

【讨论】:

以上是关于OCaml、Scala 和 Go 的结构类型实现的主要内容,如果未能解决你的问题,请参考以下文章

Scala数据类型的继承结构

『GoLang』面向对象

如何在 Ocaml 中使用类中定义的类型作为 val?

必知|Scala类型层次结构

Go interface

如何创建类型化工厂方法构造函数的类层次结构并使用抽象类型从 Scala 访问它们?