Higher Order Messaging in Smalltalk – Part 1

Há algum tempo que quero meter a “mão na massa” e implementar HOM. A motivação ressurgiu ao ler o paper Higher Order Messaging de Marcel WeiherStéphane Ducasse. A implementaçã0 mistura técnicas de currying (Ver post Currying in Smalltalk)  e metaprogramming. Existem várias versões na Web e algumas com o typo ” alice addReport: sally reports each” quando o correto é ” alice do addReport: sally reports each” (Corrgido na versão do paper em Higher Order Messaging). Isso causou alguma perda de tempo com uma missão impossível. Agravante também é o fato de usarem a linguagem Objective C (que conheço muito pouco) no paper.

Afora a sessão de reclamações acima as coisas foram bem e HOM é realmente fascinante. As técnicas que passei a dominar para fazer a implementação também serão úteis para o futuro.

Trampoline

Para implementar HOM são usados trampolines que são proxies usados para interceptar as mensagem desconhecidas transformando as em mensagens conhecidas e efetuando reduces para tornar as iterações nas collections transparentes. O trap #doesNotUnderstand: (wall back) foi intensivamente usado.

Percorri o paper tentando implementar cada caso e escrevendo testes para manter a coisa controlável. Quando estiver seguindo os códigos do paper vou sempre escrever códigos em Smalltalk que sejam equivalentes aos códigos em Objective C do paper.  Em alguns casos serão exemplificados códigos que não constam no paper. Usaremos também alguns subtítulos iguais ou semelhantes aos do paper para facilitar uma comparação. Os exemplos também seguirão de perto os do paper. A partir da segunda parte vamos tratar da implementação. Os file-outs serão colocados no final do último post da série.

Anúncios

Uma resposta para “Higher Order Messaging in Smalltalk – Part 1

  1. Pingback: High Order Messaging in Smalltalk – Part 2 | Crab Log

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s