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

时间:2013-03-07 22:48:55

标签: scala types go ocaml structural-typing

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

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

1 个答案:

答案 0 :(得分:8)

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

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