10

構造型付けについて調べているときに、Go のインターフェイスが実行時にメソッド ルックアップ テーブルにどのように変換されるかを説明している次の投稿を見つけました。この記事で説明されているプロセスは、Scala のオプションの構造型システムや Java 言語の White Oak 拡張機能について説明されているリフレクションおよび生成技術とは大きく異なるようです。

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

4

1 に答える 1

8

Jake Donham によるこのブログ投稿で、OCaml オブジェクトの内部についてかなり詳細な説明を見つけることができます。その要点は、オブジェクトサポートはほとんどが内部ライブラリとして実装されており、ほとんどが効率的なメッセージディスパッチに関するコンパイラ自体のロジック (そしてもちろん型システムのオブジェクト型付けロジック) だけです。

私は言語のこの部分の専門家ではありませんが、ざっと調べたところ、OCaml はソートされたメソッド タイプ (メソッド テーブルのスロットに解決される) のメソッド ルックアップに依存しているように見えます。静的に既知の呼び出し、特にメソッド実装内の自己呼び出しの最適化。最後に、いくつかの一般的に使用される関数 (インスタンス変数の getter や setter など) が認識され、具体的にエンコードされます (内部 OO ライブラリのタイプimpl )。これにより、パフォーマンスが向上し、さらに重要なこととして、コード サイズが削減されます。

于 2013-03-08T07:28:15.727 に答える