A atividade agora é implementar uma máquina de Turner de redução de grafos de combinadores para implementação de linguagens funcionais. O objetivo real não é implementar linguagens funcionais, até porque uma máquina de Turner pura é uma tećnica muito antiga, mas observar o comportamento de várias estratégias de
garbage collection. E nem é uma implementação nova, mas uma reimplementação, porque isso já existia mas numa versão completamente horrenda, em C. É a versão que veio direto do poço da menina de O Chamado, e eu estou tentando envia-la de volta ao limbo.
A nova versão é em
OCaml, claro. Pensei em fazer em
Haskell mas como uma parte do programa simula um heap imperativo, isso só me deixaria duas opções: fazer tudo de forma funcional, o que seria extremamente ineficiente; ou espalhar mônadas na maior parte do programa, o que não agrada muito meu senso estético. Nesse caso, as características interativas em OCaml resolvem tudo de forma simples e elegante, logo é a ferramenta mais adequada para a situação.
Ah, e o coletor de lixo usa contagem de referências. Por incrível que pareça. Mas as técnicas utilizadas permitem coleta de ciclos e tudo, embora eu ainda não veja muitas vantagens com relação a utilizar um coletor de cópia generacional, ou as abordagens híbridas comuns atualmente.