Pregunta

planeo sobre la implementación de una vinculación dinámica en mi dialecto Smalltalk. El problema se trata de conseguir el paso de mensajes para trabajar con la vinculación dinámica.

Paso de mensajes en sí es tan simple como esto: mensaje con un selector se envía al objeto, el objeto recoge una coincidencia de método con el selector de que es protocolo, luego procesar los datos incluidos con el mensaje y devuelve un resultado.

En las implementaciones basadas en imágenes, se puede implementar el paso de mensajes de manera muy sencilla - Sus selectores de mensajes sólo pueden ser números enteros traducidos de la tabla de símbolos global, sus protocolos pueden ser tablas hash sólo con números enteros y direcciones en ellos. Suponiendo que todo está compilado en una imagen con una gran tabla de símbolos que global.

En la vinculación dinámica, no se puede asumir una tabla de símbolos que apunta a un selector correcta. Se puede dar la vuelta al problema con el uso de cadenas como sus selectores, pero condenar el idioma siendo más lento.

Hay una manera, y que incluye la copia de los protocolos y una tabla de selectores para el proceso de trasladar de manera adecuada. Pero se parece mucho bastante de trabajo.

¿Hay mejores maneras de resolver este problema? Además, es la vinculación dinámica vale la pena? ¿Cómo podría aplicar la reubicación de los selectores y protocolos?

¿Fue útil?

Solución

Claro que puede suponer una tabla de símbolos global, sólo hay que actualizarlo y asegurar en tiempo de enlace que los códigos sólo utiliza las instancias de símbolos de esa tabla. ¿Tuvo un vistazo a Squeak? El código de carga es la imagen de nivel (no VM) por lo que es fácil de navegar desde cualquier imagen de Squeak.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top