2013-03-07 27 views
10

在研究結構分類時,我發現以下文章描述了how interfaces in Go are translated to method lookup tables at runtime。在這篇文章中描述的過程看起來與爲Scala的可選結構類型系統和Java語言的White Oak擴展所描述的reflective and generative techniques大不相同。OCaml,Scala和Go的結構分類實現

是否有深入的資源來討論如何在OCaml中實現結構類型化?我對任何有關名義類型系統的優化或運行時性能比較的討論都特別感興趣。

+0

有趣的僞。 – didierc 2013-03-08 17:44:20

回答

8

您可以在Jake Donham的this blog post中找到OCaml對象內部相當詳細的描述。其要點在於對象支持主要實現爲an internal library,編譯器本身(當然還有類型系統中的對象類型邏輯)中只有一點邏輯,主要圍繞有效的消息分派。

我不是這方面的專家,但經過粗略的檢查後,它看起來像OCaml依賴於排序方法類型中的方法查找(解析爲方法表中的插槽),併爲緩存方法稱爲last,以及靜態已知調用的優化,特別是方法實現內部的自調用。最後,一些常用函數(例如實例變量getter和setter)被特別識別並編碼(在內部OO庫中鍵入impl),以提高性能,並且可能更重要的是減少代碼大小。