Ich habe aus irgendeinem Grund eine Transaktion auf unbestimmte Zeit scheitern lassen, und ich würde gerne die Trace-Anweisungen verwenden. Um beispielsweise den Status der MVar vor dem Ausführen der Transaktion in diesem Fragment zu drucken:
%Vor%Würde das das Programm segfault oder miss-benehmen?
Solange Sie trace
nur zum Debuggen verwenden, sollten Sie OK sein. Im Allgemeinen nehmen Sie an, dass in der endgültigen produktionsfertigen Version Ihres Programms keine trace
s vorhanden sind.
Sie werden niemals segfolds von trace
beobachten. Ihre "Unsicherheit" resultiert daraus, dass sie in reinem Code beobachtbare Effekte injiziert. Wenn zum Beispiel in einer STM eine Transaktion wiederholt wird, wird angenommen, dass ihre Auswirkungen rückgängig gemacht werden. Wenn trace
verwendet wurde, um eine Nachricht an den Benutzer zu senden, können Sie diese nicht zurückrollen. Wenn die Ausgabe von trace
einen Raketenstart auslöst, müssen Sie mit internationalen Nebenwirkungen umgehen. Wenn trace
stattdessen nur dem Entwickler mit "FYI, der Code tut X" signalisiert, ist dies nicht Teil der Kernlogik des Programms und ist völlig in Ordnung.