0

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

消息传递本身就是这么简单:将带有选择器的消息发送给对象,对象从它的协议中选择与选择器匹配的方法,然后处理与消息绑定的数据并返回结果。

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

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

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

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

4

1 回答 1

0

当然你可以假设一个全局符号表,你只需要更新它并确保在链接时代码只使用该表中的符号实例。你看过吱吱吗?加载代码是图像级的(不是虚拟机),因此很容易从任何 Squeak 图像中浏览。

于 2009-04-02T21:01:57.477 回答