Como se proteger contra programas compilados do GHC7, levando toda a memória?

9

Ao jogar com vários algoritmos em Haskell, muitas vezes acontece a mim criar um programa com um vazamento de memória, como geralmente acontece com a avaliação lenta. O programa tirando toda a memória não é muito divertido, muitas vezes tenho dificuldade em matá-lo se eu perceber que é tarde demais.

Ao usar o GHC6, eu simplesmente tinha export GHCRTS='-M384m' no meu .bashrc . Mas no GHC7 eles adicionaram uma medida de segurança que, a menos que um programa seja compilado com -rtsopts , ele simplesmente falha quando é dada qualquer opção RTS em um argumento de linha de comando ou em GHCRTS . Infelizmente, quase nenhum programa do Haskell é compilado com esse sinalizador, portanto, configurar essa variável faz com que tudo falhe (como descobri em Após a atualização para o GHC7, todos os programas falham repentinamente dizendo "A maioria das opções de RTS está desativada. Vincule com -rtsopts para ativá-las." ).

Alguma idéia de como usar o GHCRTS com o GHC7, ou outra maneira conveniente de evitar que meus programas ocupem toda a memória?

    
por Petr Pudlák 07.09.2012 в 20:22
fonte

1 resposta

5

Você pode compilar seus próprios programas com -with-rtsopts=-M384m para definir opções de RTS em tempo de compilação (uma vez por todas). Você também pode configurar uma "lista negra" de programas que não devem ser executados com GHCRTS no seu .bashrc ; talvez algo como

for i in foo bar baz
do
    alias $i="GHCRTS= $i"
done
    
por Daniel Wagner 07.09.2012 / 21:27
fonte