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

10

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

是否有深入的资源讨论OCaml中结构类型的实现方式?我特别感兴趣的是对优化或运行时性能比较的任何讨论与命名类型系统。

1个回答

8
您可以在Jake Donham的博客文章中找到有关OCaml对象内部的相当详细的描述。它的要点是,对象支持主要是作为内部库实现的,编译器本身只有一点逻辑(当然类型系统中的对象类型逻辑),主要是围绕高效的消息分发。
我不是这种语言的专家,但经过粗略的检查,似乎OCaml依赖于在排序方法类型中查找方法(解析为方法表中的插槽),并缓存上次调用的方法以及优化静态已知的调用,特别是方法实现内部的self调用。最后,一些常用函数(例如实例变量获取器和设置器)被识别并专门编码(在内部OO库中的类型impl),以提高性能,可能更重要的是减少代码大小。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接