2008-12-25 52 views
0

我計劃實施動態鏈接到我的smalltalk方言。問題是讓消息傳遞與動態鏈接一起工作。動態鏈接smalltalk對象

消息傳遞本身就像這樣簡單:帶有選擇器的消息被髮送到對象,對象從它的協議中選擇與選擇器匹配的方法,然後處理與消息捆綁在一起的數據並返回結果。

在基於圖像的實現中,可以以非常直接的方式實現消息傳遞 - 您的消息選擇器可以只是從全局符號表中翻譯的整數,您的協議可以只是具有整數和地址的哈希表。假設它全部用全局符號表編譯成一個大圖像。

在動態鏈接中,您不能假設指向正確選擇器的符號表。你可以通過使用字符串作爲選擇器來解決問題,但是你會使語言變慢。

有一種方法,它涉及到複製協議和選擇器表以便正確重定位它們的過程。但這聽起來像很多工作。

有沒有更好的方法來解決這個問題?另外,動態鏈接是否值得呢?我怎樣才能實現選擇器和協議的重定位?

回答

0

當然你可以假設一個全局符號表,你只需要更新它,並確保在鏈接時代碼只使用該表中的符號實例。你有沒有看過Squeak?加載代碼是圖像級別(而不是VM),因此可以輕鬆瀏覽任何Squeak圖像。