1 |
[en] FINALIZERS AND CYCLES IN WEAK TABLES / [pt] FINALIZADORES E CICLOS EM TABELAS FRACASALEXANDRA BARRETO ASSAD DE BARROS 06 December 2007 (has links)
[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.
|
2 |
[pt] FINALIZADORES E REFERÊNCIAS FRACAS: INTERAGINDO COM O COLETOR DE LIXO / [en] FINALIZERS AND WEAK REFERENCES: INTERFACING WITH THE GARBAGE COLLECTORMARCUS AMORIM LEAL 03 January 2006 (has links)
[pt] Inúmeras linguagens de programação oferecem suporte a
finalizadores e referências fracas. Não obstante, de
maneira geral esses mecanismos são relativamente
pouco conhecidos e pouco usados por programadores. Mesmo
entre pesquisadores e desenvolvedores de linguagens não
existe muito consenso
quanto à sua semântica, que varia consideravelmente entre
diferentes
implementações. Neste trabalho buscamos explorar os
conceitos de finalizadores
e de referências fracas, suprindo a ausência de uma
especificação clara
e abrangente, e permitindo uma melhor compreensão,
implementação e uso
dos mecanismos correspondentes. Como ponto de partida
realizamos um
amplo levantamento sobre como é feito o suporte a
finalizadores e referências
fracas em diferentes linguagens de programação,
identificando as características comuns, os problemas, e
as questões semânticas mais relevantes associadas
às implementações consideradas. Para garantir uma maior
precisão
em nossa análise, utilizamos um modelo abstrato de uma
linguagem de programação com gerenciamento automático de
memória. Através deste modelo
especificamos formalmente a semântica de finalizadores e
referências fracas,
incluindo descrições das suas principais variantes e
mecanismos relacionados.
Além disso, provamos certas propriedades inerentes a
linguagens de
programação com gerenciamento automático de memória,
indicando como
estas são afetadas pela introdução de finalizadores e
referências fracas. Por
fim, consideramos possíveis estratégias de implementação
desses mecanismos
em diferentes tipos de sistemas. Algumas das opções
semânticas investigadas
impõe um custo de processamento expressivo, o que
frequentemente
inviabiliza a sua adoção na prática. / [en] Most mainstream programming languages support finalizers
and weak
references. In spite of that, these abstractions are still
modestly known
by programmers in general. Even among language designers
there seems
to be no common view on how to define their semantics, and
language
implementations certainly reflect that. In this thesis we
explore the concepts
of finalizer and weak reference by discussing several
important issues that, as
far as we know, have not been explored by other authors.
After presenting
a survey on how finalizers and weak references are
supported by actual
programming languages, we thoroughly examine their
semantics and discuss
alternative implementation strategies. We also use an
operational approach
to develop a formal model for reasoning about garbage
collection and its
interaction with client programs. By explicitly
representing low-level details,
such as heap memory and its addresses, we were able to
clearly specify
memory management actions, and prove several important
memory-related
language invariants. Using this model we describe a formal
semantics for
finalizers and weak references, exploring some of its many
subtleties. We
believe that the topics covered here can serve as a
relevant reference for
further investigations, and also help to guide actual
implementations.
|
Page generated in 0.0329 seconds