2008-12-25 66 views
0

我计划实施动态链接到我的smalltalk方言。问题是让消息传递与动态链接一起工作。动态链接smalltalk对象

消息传递本身就像这样简单:带有选择器的消息被发送到对象,对象从它的协议中选择与选择器匹配的方法,然后处理与消息捆绑在一起的数据并返回结果。

在基于图像的实现中,可以以非常直接的方式实现消息传递 - 您的消息选择器可以只是从全局符号表中翻译的整数,您的协议可以只是具有整数和地址的哈希表。假设它全部用全局符号表编译成一个大图像。

在动态链接中,您不能假设指向正确选择器的符号表。你可以通过使用字符串作为选择器来解决问题,但是你会使语言变慢。

有一种方法,它涉及到复制协议和选择器表以便正确重定位它们的过程。但这听起来像很多工作。

有没有更好的方法来解决这个问题?另外,动态链接是否值得呢?我怎样才能实现选择器和协议的重定位?

回答

0

当然你可以假设一个全局符号表,你只需要更新它,并确保在链接时代码只使用该表中的符号实例。你有没有看过Squeak?加载代码是图像级别(而不是VM),因此可以轻松浏览任何Squeak图像。