Ablaufsysteme
Exceptions
Ausnahmen (engl. Exceptions)
Was ist das ?
Es ist ein Mechanismus zur strukturierten Behandlung von ungewöhlichen Sitiationen: (Beispiel C++)
try
{
/* code */
if(bedingung)
throw Error();
}
catch(Error &ex)
{
/* Behandlung */
}
Natürlich kann die Ausnahme in einer gerufenen Funktion/Methode vorkommen oder
an mehreren Stellen. Dann wird der Code mit diesem Mechanismus wirklich übersichtlicher ...
Das Ablaufsystem muß auch Destruktoren von Objekten auf dem Stack aufrufen.
Design-Fragen
Nach IBM-DOKU und Divan Lectures Exception gibt es zwei Modelle der Ausnahmenbehandlung:
- Termination Model
- Wenn eine Ausnahme geworfen wurde, kehrt die Kontrolle nicht wieder zum Auswerfspunkt (throw point) zurück (so in C++,Java, Modula3)
- Resumption-Modell
- Die Ausnahmenbehandlung behandelt das Problem und kehrt dann wieder zum Auswurfspunkt zurück (PL/1)
Damit kann besser die Fehlerbehabung gemacht werden.
Die Implementierung ist aber sehr komplex.
Anwendung
- Elhadad Kurs
- beschreibt, wie man sicher für Ausnahmen programmiert.
Implementierung
- lec37.pdf (Quelle)
- skiziert 4 Implementierungen:
- Extra Return Value / Transformation in lokale gotos
- setjmp/longjmp
- Table of Continuation
- static Exception Tables
- exceptions.txt (von hier)
- beschreibt einfache auf setjmp/longjump beruhendes Macros für C
- Vishal Kochhar : How a C++ compiler implements exception handling
- Wie G++ exceptions behandelt
- Aus einer Antwort auf den letztgenannten Artikel
- Erkenntnisse aus der Analyse aus der g++-Implementierung
- Versuch minimale Exception-Behandlung fuer C++ auf L4
Informatik- und Netzwerkverein Ravensburg e.V Rudolf Weber