4

현재 동적 디스패치를 ​​구현하는 다양한 방법을 찾고 있습니다.동적 디스패치 구현

지금까지 내가,이를 구현하기 위해 두 개의 "쉬운"방법이 있습니다 알고 :

  • 가상 함수 테이블, 파이썬의 다소 가깝다 스몰 토크에서 같은 C++
  • 메시지 발송자 (처럼 나는 그들이 합리적으로 수행 되었기 때문에 지금까지의 내가 VFT 알고 선택되어 있습니다 것입니다 그들은 C++ 별도의 컴파일에 매우 적합했기 때문에 쉽게도 구현 (하고

__dict__의 속성)와 같은 방법을 저장하는 생각 모델)이 아니므로 이 가장 빠른 가능한 방법이 아니 었습니다.

필자는 몇 가지 기사와 서적을 이미 읽었지만 대부분은 "오래된"(마지막으로 펜티엄 200MHz를 사용하여 언급 한 (*)을 읽었습니다 ...) 험 (hum)입니다. 연구가 마구간에 오지 않는 한 - 예술. 그들은 여러 방법을 지원하는 경우, 더 나은

  • 동적 파견 전략 :

    나는에 관심이 있어요. 다양한 전략의

  • 벤치 마크는

나는 특히 최근 기사에 관심 아웃 오브 일반 전략 (그들이 효율적으로 증명하지 않은 경우에도)입니다.

출판물을 무료로 사용할 수 있다면 좋을 것입니다. 그렇지 않으면 발표 된 기술 요약과 결과가 훌륭합니다.

실제 컴파일러 구현에 대한 기술 자료도 환영합니다.

(*) This article about Eiffel은 전체 프로그램 분석이 가상 호출 사이트를 제거하는 방법을 보여줍니다.

답변

4

프로토 타입 기반 객체 시스템의 구현을 읽는 동안 다음 멀티 메소드 전략을 발견했습니다. 그 영역을 염두에두고 작성되었지만보다 전통적인 클래스 기반 언어에 적응하는 것은 어렵지 않습니다.

3 절에서는 자세히 설명하고 5 그림은 유용한 다이어그램입니다. 아이디어는 각 객체 (또는 아마도 클래스)가 자체의 메소드 테이블을 가지고 발송 될 수 있다는 것입니다. (이 의미에서 C++과 유사합니다.) 해당 객체 (또는 클래스)를 디스패치하는 각 메소드는 테이블에 배치됩니다. 영리한 부분은 테이블이 매개 변수 위치에 해당하는 하위 섹션으로 구분된다는 것입니다.

명확히하기 : 첫 번째 인수에는 "Foo"클래스를, 두 번째 인수에는 클래스 "Quux"를 전문으로하는 메소드가 있다고 상상해보십시오. 클래스 Foo의 디스패치 테이블의 섹션 1에는 메서드에 대한 포인터가 포함됩니다. 그리고 섹션 Quux의 디스패치 테이블 클래스를위한 두 개의은 메소드에 대한 포인터를 가질 것이다. 디스패치를 ​​수행하려면 인수 '클래스'디스패치 테이블을 참조하십시오. 메서드 포인터가 일치하면 (위의 예와 같이) 호출하는 메서드입니다.

"프로토 타입과 다중 발송"이라고합니다. http://lee.fov120.com/ecoop.pdf

+0

여러 번 발송을 잘 수행합니다. 실제로 가상 테이블과 매우 유사하며 그러한 지원이 일반적으로 요구하는 조합 폭발을 멋지게 회피합니다. 감사 :) –

관련 문제