Catch&Throw
M. Kalus, 2008
CATCH & THROW
Auf einem Tutorial der Forthtagung 2008 im Kloster Roggenburg wurden
catch und trow des Forth genau erklärt. Das war nicht so ganz einfach zu verstehen.
In Erinnerung an das Buch
Starting Forth von Leo Brodie dachte ich, dem catch und throw müsste man eigentlich auch in einer Bildergeschichte zu Leibe rücken können: Auf gehts.
Wir programmieren etwas in Forth...
...natürlich in Forth, was sonst.
Und natürlich sind wir von uns überzeugt.
Das Program ist gut geraten,
und wird genau das tun, was wir vorgesehen haben. Was sonst?
Programmstart, der Ball ist im Spiel.
Natürlich wissen wir, dass hinter dem Namen unseres Programmes sein XT steckt, das execution token. Also lassen wir es mal los laufen, um zum glücklichen Ausgang zu kommen.
Nichts unversucht lassen.
Dieser Schritt ist wichtig. Ohne die vielen Probeläufe und beta-Tester würden wir ja sonst nie erfahren, ob es wirklich das tut, was es eigentlich tun sollte.
Noch sieht alles ganz gut aus.
Es läuft wie geschmiert. Bisher scheint es wirklich das zu tun was es soll. Prima.
Wir sind im Spiel vorne.
Da bisher alles geklappt hat, sind wir zufrieden.
Das Ziel ist schon in Sicht
Es wird einen glücklichen Ausgang geben.
Ja, wirklich!
Es hat tatsächlich geklappt - die Freude ist groß.
Der Ausgang ist erreicht.
Über den EXIT verlassen wir unser Program wie gedacht, und alles ist gut gegangen.
again
Beim nächsten Probelauf hingegen sieht die Sache schon anders aus. :-(
exception
Solche Angriffe waren zu erwarten. Nur wann, das ist nie vorhersehbar.
Diesmal geht die Ausführung schief.
Doch bevor wir irgendwohin abstürzen...
THROW
...werfen wir die #exc (exeption number). Und wer sie fängt kann damit weiter spielen.
CATCH
Gut das es einen geschickten Fänger gibt. Er hat jetzt die #exc (exeption number) und kann da weiter machen, wo es wieder sicher ist.
Alle Stacks...
... sind nach dem Wurf wieder ordentlich aufgestellt.
EXCEPTION
Auch gibt es einen Plan für die Behandlung von Ausnahmen. Daher ist es von Bedeutung, dass wir genau dort sicher landen. Und die #exc (exeption number) weiter bearbeiten können.
begin
So können wir neu starten und das Ganze noch mal versuchen.
abort
Manchmal jedoch muss ein Spiel ganz abgebrochen werden, was immer schade ist. Aber besser als mit dem kompletten System abzustürzen.
CATCH & THROW
Wie CATCH und THROW da genau machen und immer den richtigen Rahmen finden wird auf den folgenden Seiten im Text näher erklärt. Tschüss