Ist es sicher, Trace in einer STM-Transaktion zu verwenden?

8

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?

    
dsign 01.06.2015, 08:51
quelle

1 Antwort

9

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.

    
chi 01.06.2015, 09:14
quelle

Tags und Links