Qual é a necessidade de coleta de lixo (GC) em um idioma baseado em pilha? Em um idioma como Forth ou RPL (nas calculadoras HP ), há necessidade de coleta de lixo?
Eu pensaria que, como a saída é removida da pilha, não haveria necessidade. Estou esquecendo de algo?
garbage-collection
stack-oriented
Todd Moses
fonte
fonte
Sim, você está certo. Mas a base da pilha é apenas uma parte de toda a história. Por exemplo, o interpretador Java bytecode também é baseado em pilha (o código compilado funciona - por razões de eficiência - de maneira diferente). Isso nos diz que qualquer idioma pode ser transformado em um idioma de pilha.
O que importa são os objetos fora da pilha, aqueles que podem sobreviver à execução atual do método. Desde que a linguagem não tenha nada parecido
malloc
ounew
não, não existem esses objetos e você não precisarádelete
nem do GC.Um idioma sem alocação dinâmica de memória é bastante limitado em sua utilidade.
fonte
A coleta de lixo é necessária se o idioma suportar estruturas de dados dinâmicas inerentemente. O que é quase uma necessidade se você deseja fazer algo além do nível C. Sem isso, você fica preso apenas a estruturas de dados de tamanho fixo e gerenciando a memória por conta própria. É o que o Forth original faz, é claro, mas provavelmente não é algo que você gostaria de fazer hoje, a menos que você esteja apenas codificando sistemas de baixo nível.
fonte
A coleta de lixo não é necessária se o idioma usar alocação estática em vez de alocação de pilha. Por exemplo, o Fortran 77 com a opção -s (armazenamento estático) aloca toda a memória quando o programa é iniciado, portanto, nenhuma alocação de memória ocorre no tempo de execução para ser liberada. Embora exija alguma disciplina, é possível escrever programas, especialmente simulações para usar a alocação de memória estática. A alocação estática remove qualquer vazamento de memória e leva a um ótimo desempenho do cache, pois o compilador pode usar a análise estática para determinar o que carregar no cache.
fonte