Return to search

[en] FINALIZERS AND CYCLES IN WEAK TABLES / [pt] FINALIZADORES E CICLOS EM TABELAS FRACAS

[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. / [en] Weak References and finalizers constitute an elegant
alternative to obtain
control over the interaction between the application and
the garbage collector.
However, in some contexts, finalizers are not necessary
because it`s
possible to extend the weak reference mechanism in order
to give support
to finalization. In this work, we present a survey of the
most common uses
of these mechanisms. We also show how weak references can
replace finalizers
proposing a weak reference based implementation for each
finalizer use.
Based on this survey, we developed a finalization
mechanism based on weak
references for the Lua programming language.
Motivated by our proposal of a better exploration of the
weak reference
mechanism, we developed a solution for an important
problem related to
cycles on weak tables, an structure created using weak
references. Cyclic
references between keys and values prevents the elements
inside the cycle
from being collected, even if they are no more reachable.
This ends up
bringing difficulties to the use of weak tables in certain
kinds of applications.
The Haskell programming language solved this problem
implementing an
adaptation of a mechanism called ephemerons. Based on this
fact, we
modified the Lua garbage collector in order to offer
support to ephemerons.
As a result, we were able to solve the problem of cycles
on weak tables in
Lua.

Identiferoai:union.ndltd.org:puc-rio.br/oai:MAXWELL.puc-rio.br:10985
Date06 December 2007
CreatorsALEXANDRA BARRETO ASSAD DE BARROS
ContributorsROBERTO IERUSALIMSCHY
PublisherMAXWELL
Source SetsPUC Rio
LanguagePortuguese
Detected LanguagePortuguese
TypeTEXTO

Page generated in 0.0018 seconds