Question

Je prévois sur l'implémentation d'une liaison dynamique dans mon dialecte Smalltalk. Le problème est de faire passer un message à travailler avec liaison dynamique.

message lui-même passant est aussi simple que celle-ci: un message avec un sélecteur est envoyé à l'objet, l'objet prend une adaptation de la méthode avec le sélecteur à partir de son protocole, il traite ensuite les données fournies avec le message et renvoie un résultat.

Dans les implémentations basées sur l'image, on peut mettre en oeuvre le passage de messages de manière très simple - Vos sélecteurs de messages peuvent être simplement entiers traduits de la table de symboles globale, vos protocoles peuvent être seulement des tables de hachage avec des nombres entiers et adresses en eux. En supposant que tout est compilé dans une seule grande image avec cette table de symbole mondial.

Dans la liaison dynamique, vous ne pouvez pas prendre une table de symboles montrant un sélecteur correct. Vous pouvez tourner autour du problème avec l'utilisation de chaînes que vos sélecteurs, mais vous condamnera la langue étant plus lente.

Il y a une façon, et il implique la copie des protocoles et une table de sélecteurs pour le processus de les réinstaller correctement. Mais il est ressemble beaucoup tout à fait du travail.

Y at-il de meilleures façons de résoudre ce problème? De plus, est la liaison dynamique vaut le coup? Comment pourrais-je mettre en œuvre la relocalisation pour les sélectionneurs et les protocoles?

Était-ce utile?

La solution

Bien sûr, vous pouvez supposer une table de symboles globale, il vous suffit de le mettre à jour et d'assurer à l'heure de lien que les codes utilise uniquement les instances de symboles de cette table. Avez-vous eu un coup d'oeil à Squeak? Le code de chargement est l'image-niveau (pas VM) il est donc facile de naviguer d'une image Squeak.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top