What |
I
am investigating predicate dispatch, its efficient general implementation,
and results in using these techniques for implementing the Dylan programming
language's method dispatch mechanism. Predicate dispatch [ErnstKaplanChambers-ECOOP-98]
provides a generalization of other method dispatch techniques through the
utilization of arbitrary predicates to control method applicability and
logical implication between predicates to determine method overriding. It
generalizes previous object-oriented single and multimethod dispatch, ML-style
pattern matching, predicate classes, and classifiers. An efficient predicate
dispatch implementation technique [ChambersChen-OOPSLA-99] involves reducing
general predicate dispatch into multidispatch using a canonicalization process,
mapping multidispatch onto a sequence of single dispatches through the construction
of a decision DAG, and finally implementing single dispatch in terms of
a binary search. Dylan provides a rich set of built-in types and a powerful
multimethod dispatch mechanism that present several challenges to the predicate
dispatch mechanism and its implementation. I have worked out a mapping of
Dylan types onto predicate types, a dynamic x86 code generator, and several
improvements over the general implementation strategy. This work will lay
the foundation for an upcoming research on advanced implementation issues
such as redefinition, multiple threads, call-site caches, and dynamic construction.
|