2013-03-07 17 views
10

構造型の型付けについて調べているうちに、私はhow interfaces in Go are translated to method lookup tables at runtimeという次の投稿を見つけました。この記事で説明したプロセスは、Scalaのオプションの構造型システムとJava言語のホワイトオーク拡張について記述されているreflective and generative techniquesと大きく異なるようです。OCaml、Scala、Goの構造型の実装

OCamlで構造型がどのように実装されているかを説明する詳細なリソースはありますか?私は、名目型のシステムとの最適化やランタイムパフォーマンスの比較に関する議論に特に興味があります。

+0

興味深い擬似。 – didierc

答えて

8

OCamlオブジェクトの内部構造の詳細な説明は、this blog postでJake Donhamによって見つけることができます。その要点は、ほとんどの場合、オブジェクトのサポートはan internal libraryとして実装されていることです。コンパイラ自体のロジック(および型システムのオブジェクト型ロジック)はほとんどが効率的なメッセージディスパッチの周りにあります。

私は言語のこの部分の専門家ではありませんが、大雑把な検査の後では、OCamlはソートされたメソッドタイプ(メソッドテーブルのスロットに解決された)でメソッドルックアップに依存しています。最後に呼ばれるメソッド、および静的に既知の呼び出しの最適化、特にメソッド実装内の自己呼び出し。最後に、一般的に使用されるいくつかの関数(インスタンス変数getterやsetterなど)は、パフォーマンスを改善し、おそらくより重要なことにコードサイズを縮小するために、内部OOライブラリで具体的に認識され、コード化されます(内部オブジェクト指向ライブラリでimplタイプ)。