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

Syl*_*sis 10 ocaml types scala go structural-typing

在研究结构类型时,我发现以下帖子描述了Go中的接口如何在运行时转换为方法查找表.帖子中描述的过程似乎 Scala的可选结构类型系统和Java语言的White Oak扩展所描述的反射和生成技术大不相同.

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

gas*_*che 8

您可以在这篇由Jake Donham撰写的博客文章中找到OCaml对象内部的详细描述.它的要点是对象支持主要是作为内部库实现,编译器本身只有一点逻辑(当然还有类型系统中的对象类型逻辑),主要是围绕有效的消息调度.

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