Suponha que você tenha alguma linguagem de programação com gerenciamento manual de memória. Quais recursos essa linguagem precisa para poder implementar a coleta de lixo precisa como uma biblioteca e não como uma construção fundamental da linguagem?
Por um GC preciso, quero dizer um em que apenas ponteiros para a pilha são percorridos para verificar quais variáveis estão ou não estão ativas.
Algumas considerações adicionais:
- C e C ++ têm o coletor de lixo Boehm, mas não conto isso, já que não é um GC preciso. O coletor Boehm assume que qualquer coisa na pilha que possa ser um ponteiro, com base puramente nos requisitos de alinhamento de memória, é um ponteiro. Por exemplo, qualquer número inteiro
k
que(k % 4) == 0
pareça um nível de bit como um ponteiro, pois os ponteiros devem estar alinhados em 4 bytes. - o pega transforma o código C existente para usar um coletor de lixo preciso. O código C gerado possui muitos stubs para coleta de lixo, ou seja, material para registrar qualquer ponteiro de pilha na pilha com o coletor. Não conto isso porque ninguém poderia escrever código dessa maneira; é mais um destino de compilação para outros idiomas.
Eu imagino que essa linguagem precisaria ter:
- Macros ou alguma forma de metaprogramação, para encapsular todo o código extra necessário para fazer coisas como registrar raízes de GC.
- Algum mecanismo reflexivo que permite inspecionar estruturas ou uniões; você precisa determinar quais membros são ponteiros.
- Algum mecanismo reflexivo que permite examinar o layout do quadro da pilha. Isso soa muito mais difícil que 2.
Espero que isso não seja muito vago ou baseado em opiniões, mas estou pensando nisso há algum tempo.