문제

나는 SmallTalk 방언에 동적 링크를 구현할 계획입니다. 문제는 Dynamic Linking을 사용하여 메시지를 전달하는 것입니다.

메시지 자체가 전달되는 메시지만큼 간단합니다. 선택기가있는 메시지가 객체로 전송되고, 객체는 프로토콜에서 선택기와 일치하는 메소드를 선택한 다음 메시지와 함께 번들 된 데이터를 처리하고 결과를 반환합니다.

이미지 기반 구현에서는 매우 간단한 방식으로 전달되는 메시지를 구현할 수 있습니다. 메시지 선택기는 글로벌 심볼 테이블에서 정수를 번역 할 수 있습니다. 프로토콜은 정수와 주소가있는 해시 테이블 일 수 있습니다. 그것이 모두 그 글로벌 심볼 테이블을 사용하여 하나의 큰 이미지로 컴파일되었다고 가정합니다.

동적 링크에서는 올바른 선택기를 가리키는 심볼 테이블을 가정 할 수 없습니다. 셀렉터로 문자열을 사용하는 데 문제가 발생할 수 있지만 언어는 느려집니다.

한 가지 방법이 있으며 프로세스가 올바르게 재배치 할 수 있도록 프로토콜과 선택기 테이블을 복사하는 것이 포함됩니다. 그러나 그것은 많은 일처럼 들립니다.

이 문제를 해결하는 더 좋은 방법이 있습니까? 또한 역동적 인 링크는 그만한 가치가 있습니까? 선택기 및 프로토콜의 재배치를 어떻게 구현할 수 있습니까?

도움이 되었습니까?

해결책

물론 글로벌 심볼 테이블을 가정 할 수 있습니다. 링크 시간에 코드가 해당 테이블의 심볼 인스턴스 만 사용하도록하는 것만 확인하면됩니다. Squeak를 보셨습니까? 로드 코드는 이미지 레벨 (VM이 아님)이므로 Squeak 이미지에서 쉽게 탐색 할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top