======= Workflow ======
Ein Workflow beschreibt einen RAII-Ablauf, sobald ein Fehler passiert, wird der Workflow-Stack wieder abgebaut, so dass alle Resourcen wieder geschlossen werden
workflow
file = open( "c:\temp" ),
mem = malloc( file.size ),
file >> mem;
puts mem;
Grundsätzlich lässt sich das auch für fails nutzen, um try/catch entgegen zu wirken:
worflow
{
out << "- ";
out << item;
func();
out << "
";
}
case ostream::OutOfSpace:
puts "Nicht genug Festplattenkapazität";
case func::MiscError:
puts "ein anderer Fehlertyp"
default:
puts "some of the commands above have failed";
Hier kommt der Vorteil von Exceptions zum Tragen, dass mehrere Anweisungen mit der gleichen Fehlerbehandlung ausgeführt werden können, wie auch das normale Fehlermanagement, was eine sofortige Reaktion verlangt.
Umgesetzt wird das, dass jede Funktion auf den Fehlercode geprüft wird und im Falle eines Fehlers an eine switch-Anweisung gesprungen wird, die ausschließlich Fehlercodes dieses Typs abfragt. So muss der Typ nicht in den Fehler reinkodiert werden.