X86 与smalltalk对象的动态链接

X86 与smalltalk对象的动态链接,x86,smalltalk,dynamic-linking,language-implementation,X86,Smalltalk,Dynamic Linking,Language Implementation,我计划在我的smalltalk方言中实现一个动态链接。问题在于如何让消息传递与动态链接一起工作 消息传递本身非常简单:带有选择器的消息被发送到对象,对象从其协议中选择与选择器匹配的方法,然后处理与消息绑定的数据并返回结果 在基于图像的实现中,可以以非常简单的方式实现消息传递—消息选择器可以是从全局符号表转换过来的整数,协议可以是包含整数和地址的哈希表。假设所有这些都被编译成一个带有全局符号表的大图像 在动态链接中,不能假定符号表指向正确的选择器。您可以通过使用字符串作为选择器来解决这个问题,但是

我计划在我的smalltalk方言中实现一个动态链接。问题在于如何让消息传递与动态链接一起工作

消息传递本身非常简单:带有选择器的消息被发送到对象,对象从其协议中选择与选择器匹配的方法,然后处理与消息绑定的数据并返回结果

在基于图像的实现中,可以以非常简单的方式实现消息传递—消息选择器可以是从全局符号表转换过来的整数,协议可以是包含整数和地址的哈希表。假设所有这些都被编译成一个带有全局符号表的大图像

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

有一种方法,它包括复制协议和选择器表,以便流程正确地重新定位它们。但这听起来像是一个相当多的工作


有没有更好的方法来解决这个问题?另外,动态链接值得吗?我如何实现选择器和协议的重新定位?

确保您可以假设一个全局符号表,您只需更新它,并在链接时确保代码仅使用该表中的符号实例。你看过Squeak吗?加载的代码是映像级的(不是VM),因此很容易从任何吱吱作响的映像进行浏览