Existe uma necessidade de coleta de lixo em uma linguagem baseada em pilha?

14

Qual é a necessidade de coleta de lixo (GC) em uma linguagem baseada em pilha? Em uma linguagem como Forth ou RPL (em calculadoras HP ), há necessidade de coleta de lixo ?

Eu acho que, como a saída é removida da pilha, não haveria necessidade. Estou faltando alguma coisa?

    
por Todd Moses 15.09.2011 / 16:41
fonte

4 respostas

13

O GC é normalmente aplicado à memória alocada no heap. Eu não estou familiarizado com o Forth ou o RPL, mas se não houver heap e tudo estiver armazenado em uma pilha global, não há nada para o GC fazer.

    
por 15.09.2011 / 16:53
fonte
12

Sim, você está certo. Mas a base da pilha é apenas uma parte de toda a história. Por exemplo, o interpretador de bytecode Java também é baseado em pilha (o código compilado funciona - por razões de eficiência - de forma diferente). Isso nos diz que qualquer idioma pode ser transformado em uma linguagem de pilha.

O que importa são os objetos fora da pilha, aqueles que podem sobreviver à execução do método atual. Contanto que a linguagem não tenha nada como malloc ou new , não há objetos desse tipo e você não precisa de delete nem GC.

Uma linguagem sem alocação de memória dinâmica é bastante limitada em sua utilidade.

    
por 15.09.2011 / 16:56
fonte
1

A coleta de lixo é necessária se o idioma for suportar estruturas de dados dinâmicas inerentemente. O que é quase uma necessidade se você quiser fazer algo além do nível de C. Sem isso, você fica preso apenas a estruturas de dados de tamanho fixo e gerencia a memória por conta própria. Isso é o que o original Forth faz, é claro, mas provavelmente não é algo que você gostaria de fazer hoje, a menos que você esteja apenas fazendo códigos de sistemas de baixo nível.

    
por 28.07.2016 / 17:57
fonte
1

A coleta de lixo não é necessária se o idioma usar a alocação estática em vez da alocação de pilha. Por exemplo, 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 seja necessária 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, já que o compilador pode usar a análise estática para determinar o que carregar no cache.

    
por 28.07.2016 / 18:06
fonte