A compiler is described that generates instructions to execute
object-oriented method call invocations in an efficient manner.
Specifically, a method dispatch operation distinguishes between those
method calls that do not require dynamic invocation from those that do,
and optimizes the instructions generated to perform the former. For each
object class declaration encountered during compilation, a dispatch array
is created. Each dispatch array contains entries for all method calls
which can be made to the class, including those implemented in an ancestor
class(es), and all protocols adopted by these classes. As each method call
is parsed during compilation, if the compiler finds an entry for the
calling method in a dispatch table, an instruction to call a non-dynamic
method dispatch function is generated. If, on the other hand, no entry for
the calling method is found in a dispatch array, the compiler generates a
conventional dynamic method dispatch instruction. The non-dynamic method
dispatch function uses the dispatch array to directly identify the calling
method's executable code segment. Use of non-dynamic method invocation can
provide a substantial speed gain during program execution.
Um compilador é descrito que gere instruções para executar invocations object-oriented da chamada do método em uma maneira eficiente. Especificamente, uma operação da expedição do método distingue entre aquelas chamadas do método que não requerem o invocation dinâmico daquelas que , e optimizes as instruções geradas para executar o anterior. Para cada declaração da classe do objeto encontrada durante a compilação, uma disposição da expedição é criada. Cada disposição da expedição contem entradas para todas as chamadas do método que podem ser feitas à classe, including aquelas executada em um class(es) do antepassado, e a todos os protocolos adotados por estas classes. Enquanto cada chamada do método está analisada gramaticalmente durante a compilação, se o compilador encontrar uma entrada para o método de chamada em uma tabela da expedição, uma instrução para chamar uma função non-dynamic da expedição do método está gerada. Se, na outra mão, nenhuma entrada para o método de chamada for encontrada em uma disposição da expedição, o compilador gera uma instrução dinâmica convencional da expedição do método. A função non-dynamic da expedição do método usa a disposição da expedição identificar diretamente o segmento de código executável do método de chamada. O uso do invocation non-dynamic do método pode fornecer um ganho substancial da velocidade durante a execução de programa.