Smalltalkのオブジェクトとの動的リンク
-
23-08-2019 - |
質問
私はSmalltalkの方言に動的リンクを実装について計画します。問題は、動的リンクで動作するようにメッセージパッシングを得ることについてである。
メッセージ自体通過するが、このように単純である:セレクタとのメッセージがオブジェクトに送られ、オブジェクトは、それがプロトコルだからセレクタを有する方法マッチングをピックアップし、それは、メッセージにバンドルデータを処理し、結果を返します。
画像ベースの実装では、1は非常に簡単な方法でメッセージパッシングを実装することができます - あなたのメッセージセレクタは、グローバルシンボルテーブルから翻訳ちょうど整数であることができ、あなたのプロトコルは、それらの整数とアドレスを持つだけでハッシュテーブルをすることができます。それはすべてのことグローバル・シンボル・テーブルに一つの大きな画像にコンパイルされますと仮定します。
動的リンクでは、正しい選択を指すシンボルテーブルを想定することができません。あなたのセレクタとして文字列を使用して問題が好転することはできますが、言語が遅くなるという運命ます。
1つの方法はあり、それはそれらを適切に再配置するプロトコルおよびプロセスのためのセレクタのテーブルのコピーを必要とします。しかし、それは仕事のかなり多くのような音です。
この問題を解決するためのより良い方法はありますか?また、動的リンクは、それだけの価値がありますか?どのように私は、セレクタとプロトコルの再配置を実装するだろうか?
解決
あなたはグローバルシンボルテーブルを想定することができます確かに、あなたはそれを更新し、コードが唯一そのテーブルからシンボルインスタンスを使用していることを、リンク時に確認する必要があります。あなたは、Squeakのを見ていましたか?ローディングコードは画像レベル(ないVM)であるので、任意のきしみ画像から閲覧することが容易だ。