0

私の smalltalk 方言に動的リンクを実装することを計画しています。問題は、動的リンクでメッセージ パッシングを機能させることです。

メッセージの受け渡し自体は次のように単純です。セレクターを含むメッセージがオブジェクトに送信され、オブジェクトはそのプロトコルからセレクターに一致するメソッドを取得し、メッセージにバンドルされたデータを処理して結果を返します。

画像ベースの実装では、非常に簡単な方法でメッセージ パッシングを実装できます。メッセージ セレクターは、グローバル シンボル テーブルから変換された単なる整数にすることができ、プロトコルは、整数とアドレスを含むハッシュ テーブルにすることができます。そのグローバル シンボル テーブルを使用して、すべてが 1 つの大きなイメージにコンパイルされていると仮定します。

動的リンクでは、シンボル テーブルが正しいセレクターを指していると想定することはできません。文字列をセレクターとして使用することで問題を回避できますが、言語が遅くなる運命にあります。

1 つの方法があり、プロトコルとセレクターのテーブルをコピーして、プロセスがそれらを適切に再配置する必要があります。しかし、それはかなりの労力のように聞こえます。

この問題を解決するためのより良い方法はありますか? また、動的リンクはそれだけの価値がありますか? セレクターとプロトコルの再配置を実装するにはどうすればよいですか?

4

1 に答える 1

0

確かに、グローバル シンボル テーブルを想定できます。それを更新して、コードがそのテーブルのシンボル インスタンスのみを使用することをリンク時に確認する必要があります。Squeakを見ましたか?ロード コードはイメージ レベル (VM ではない) であるため、任意の Squeak イメージから簡単に参照できます。

于 2009-04-02T21:01:57.477 に答える