Wie kann ich vor GHC7-kompilierten Programmen schützen, die den gesamten Speicher belegen?

9

Beim Spielen mit verschiedenen Algorithmen in Haskell passiert es mir oft, dass ich ein Programm mit einem Speicherleck erstelle, wie es oft bei fauler Auswertung passiert. Das Programm, das die gesamte Erinnerung aufnimmt, macht nicht wirklich Spaß, ich habe oft Schwierigkeiten, es zu töten, wenn ich es zu spät erkenne.

Bei Verwendung von GHC6 hatte ich einfach export GHCRTS='-M384m' in meinem .bashrc . In GHC7 wurde jedoch eine Sicherheitsmaßnahme hinzugefügt, die fehlschlägt, wenn ein Programm mit -rtsopts kompiliert wird wenn es eine RTS-Option entweder in einem Befehlszeilenargument oder in GHCRTS erhält. Leider werden fast keine Haskell-Programme mit diesem Flag kompiliert. Wenn Sie also diese Variable setzen, wird alles gescheitert (wie ich in nach dem Upgrade auf GHC7 festgestellt habe, Alle Programme schlagen plötzlich fehl und sagen: "Die meisten RTS-Optionen sind deaktiviert. Verknüpfen Sie sie mit -rtsopts, um sie zu aktivieren." ).

Irgendwelche Ideen, wie man GHCRTS mit GHC7 nutzen kann, oder eine andere praktische Möglichkeit, wie ich verhindern kann, dass meine Programme den gesamten Speicher belegen?

    
Petr Pudlák 07.09.2012, 18:22
quelle

1 Antwort

5

Sie können Ihre eigenen Programme mit -with-rtsopts=-M384m kompilieren, um RTS-Optionen zur Kompilierzeit (ein für allemal) zu setzen. Sie könnten auch eine "Blacklist" von Programmen einrichten, die nicht mit GHCRTS in Ihrem .bashrc ausgeführt werden sollten; vielleicht so etwas wie

%Vor%     
Daniel Wagner 07.09.2012, 19:27
quelle

Tags und Links