Ist es empfehlenswert, NoStackTrace in Scala zu verwenden?

11

Ich bin auf das NoStackTraceMixin für Ausnahmen in Scala gestoßen.

Ist es eine gute Praxis, es zu verwenden, oder sollte es als "intern" für Scala betrachtet und in Ruhe gelassen werden?

Daenyth
quelle

Antworten:

14

Gehen wir für einen Moment zu Stack Overflow - Wie langsam sind Java-Ausnahmen?

Es stellt sich heraus, dass der teure Teil des Auslösens von Ausnahmen die Population der Stapelverfolgung ist, die mit der Ausnahme einhergeht.

Diese Stapelverfolgung ist sehr hilfreich beim Debuggen von Problemen, um herauszufinden, woher die Dinge aufgerufen werden. Eine der Standardfragen bei Problemen lautet "Was ist der Code?" Und "Was ist der Stack-Trace?". Ohne diese beiden Dinge ist die Diagnose eines Problems nahezu unmöglich.

Es werden jedoch nicht alle Ausnahmen durch Probleme generiert . Einige davon erwarten Sie fast.

Stellen Sie sich vor, Sie haben einen String aus einer Quelle und möchten ihn mit Integer.decode wieder in ein ganzzahliges Format bringen .

Integer foo = Integer.decode(str);

Aber das decodewirft einen Scheck NumberFormatException. In Ordnung...

Integer foo;
try {
    foo = Integer.decode(str);
} catch (NumberFromatException e) {
    // raise an error back to the input form
}

Aber die Stapelverfolgung dort ist dir wirklich egal ... aber sie ist da. Und nur ein bisschen langsamer, weil es den Stack-Trace gefüllt hat.

In Scala haben Sie also Folgendes NoStackTrace:

Ein Merkmal für Ausnahmen, die aus Effizienzgründen die Stapelverfolgung nicht ausfüllen. Die Unterdrückung von Stapelverfolgungen kann global über einen Systemeigenschafts-Wrapper in scala.sys.SystemProperties deaktiviert werden.

Füllen Sie nicht aus, was Sie nicht benötigen. Der Stack-Trace ist Ihnen egal, da Sie ihn genau dort und dann verarbeiten. Dies ist nicht etwas, das verpasst wird, und es ist auch nicht allzu außergewöhnlich.

Es ist keine schlechte Praxis, es zu verwenden, wenn Sie wissen, was Sie handhaben. Wenn Sie dies jedoch in der Kette weitergeben - verwenden Sie es nicht - müssen Sie möglicherweise nur protokollieren, woher eine Ausnahme stammt.

Gemeinschaft
quelle