[pt] FINALIZADORES E CICLOS EM TABELAS FRACAS - ALEXANDRA BARRETO ASSAD DE BARROS (2007)
[pt] Referências fracas e finalizadores constituem uma alternativa elegante para se obter controle sobre a interação entre a aplicação e o coletor de lixo. No entanto, em alguns contextos, finalizadores são desnecessários, pois é possível estender o mecanismo de referências fracas a fim de dar suporte a finalização. Neste trabalho, realizamos um estudo detalhado sobre os usos desses mecanismos e mostramos como é possível substituir finalizadores por referências fracas propondo uma implementação baseada em referências fraca para cada uso de finalizadores. Baseado nesse estudo, desenvolvemos um mecanismo de finalização via referências fracas para a linguagem Lua. Motivados por nossa proposta de uma maior exploração do mecanismo de referências, desenvolvemos um algoritmo para um importante problema relacionado a ciclos em tabelas fracas, uma estrutura criada a partir de referências fracas. A existência de referências cíclicas entre chaves e valores impede que os elementos que compõem o ciclo sejam coletados, mesmo que eles não sejam mais utilizados pelo programa. Isso acaba dificultando o uso de tabelas fracas em determinadas aplicações. A linguagem Haskell resolveu esse problema através de uma adaptação do mecanismo de ephemerons ao seu coletor de lixo. Partindo desse fato, modificamos a implementação do coletor de lixo de Lua para que este oferecesse suporte ao mecanismo de ephemerons. Dessa forma, pudemos eliminar o problema de ciclos em tabelas fracas nessa linguagem.