Pergunta

Estou pensando sobre a implementação de uma ligação dinâmica em meu smalltalk dialeto. O problema é sobre a obtenção de passagem de mensagens para trabalhar com a ligação dinâmica.

A troca de mensagens em si é tão simples como isto: mensagem com um seletor é enviado para o objeto, as picaretas objeto para cima uma correspondência método com o seletor a partir dele do protocolo, em seguida, processar os dados empacotados com a mensagem e retorna um resultado.

Em implementações com base em imagens, pode-se implementar a passagem de mensagens de forma muito simples - seus seletores mensagem pode ser apenas números inteiros traduzido a partir da tabela de símbolos global, seus protocolos podem ser apenas tabelas hash com números inteiros e endereços neles. Assumindo que tudo é compilado em um uma grande imagem com que a tabela símbolo global.

Em vinculação dinâmica, você não pode assumir um apontador símbolo tabela para um seletor correto. Você pode virar o problema com o uso de cordas como seus seletores, mas você condenar a língua ser mais lento.

Há uma maneira, e que envolve a cópia dos protocolos e uma tabela de seletores para o processo para realocá-los corretamente. Mas é soa como uma bastante grande quantidade de trabalho.

Há melhores maneiras de resolver este problema? Além disso, é a dinâmica que liga vale a pena? Como eu poderia implementar a deslocalização para os seletores e protocolos?

Foi útil?

Solução

Claro que você pode assumir uma tabela de símbolos global, você só tem que atualizá-lo e garantir em tempo de ligação que os códigos só usa instâncias de símbolos dessa tabela. Será que você tem um olhar para Squeak? O código de carregamento é imagem de nível (não VM) por isso é fácil de navegar a partir de qualquer imagem Squeak.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top