Memoization of mutable state
Carregando...
Arquivos
Data
Autor(es)
Título da Revista
ISSN da Revista
Título de Volume
Editor
Universidade Federal de Minas Gerais
Descrição
Tipo
Dissertação de mestrado
Título alternativo
Memoização de estado mutável
Primeiro orientador
Membros da banca
André Rauber Du Bois
Haniel Moreira Barbosa
Haniel Moreira Barbosa
Resumo
Memoization is an optimization that consists of caching the results of functions to avoid
recomputations of repeated calls. This technique is natively built into some programming
languages and implemented as a design pattern in others. Yet, in spite of its popularity,
memoization has limitations. In particular, mutable objects cannot be cached, because if
a memoized object is mutated, then this modification might have an effect on all the mem-
oized instances of it. This dissertation presents a technique to address this constraint by
using shared-ownership pointers to distinguish between memoized and non-memoized ob-
jects. If a memoized object is modified, then this object is removed from the memoization
table, and all its aliases are updated through the shared pointer. We have implemented
this technique into the runtime environment of the Hush programming language. Our
implementation incurs no penalty on non-memoized objects and adds minimum overhead
to cached ones. To demonstrate the correctness of this approach, we have formalized it in
the Alloy modeling language. This specification certifies that a memoized object remains
so unless it is modified.
Abstract
Memoização é uma otimização que consiste em armazenar em cache os resultados das
funções para evitar recomputações de chamadas repetidas. Esta técnica é incorporada
nativamente em algumas linguagens de programação e implementada como um padrão de
design em outras. No entanto, apesar de sua popularidade, a memoização tem limitações.
Em particular, objetos mutáveis não podem ser armazenados em cache, pois se um objeto
memoizado sofrer mutação, essa modificação poderá afetar todas as instâncias memo-
izadas dele. Esta dissertação apresenta uma técnica para resolver esta restrição usando
ponteiros de posse compartilhada para distinguir entre objetos memoizados e não mem-
oizados. Se um objeto memoizado for modificado, esse objeto será removido da tabela
de memoização e todos os seus aliases serão atualizados por meio do ponteiro compartil-
hado. Implementamos esta técnica no ambiente de execução da linguagem de programação
Hush. Nossa implementação não incorre em penalidades em objetos não memoizados e
adiciona sobrecarga mínima aos objetos armazenados em cache. Para demonstrar a cor-
retude dessa abordagem, nós a formalizamos na linguagem de modelagem Alloy. Esta
especificação certifica que um objeto memorizado permanece assim, a menos que seja
modificado.
Assunto
Computação – Teses, Programação orientada a objetos (Computação) – Teses, Linguagens de programação – Teses
Palavras-chave
Memoization, Object-Oriented Programming, Function Caching
Citação
Departamento
Endereço externo
Avaliação
Revisão
Suplementado Por
Referenciado Por
Licença Creative Commons
Exceto quando indicado de outra forma, a licença deste item é descrita como Acesso Aberto
