Home

TailCallOptimierung

TailCallOptimierung, im Englischen tail call optimization (TCO) genannt, ist eine Technik von Compilern und Laufzeitumgebungen, die darauf abzielt, den Speicherbedarf rekursiver Aufrufe zu reduzieren. Ein Tail Call ist ein Funktionsaufruf, der als letzte Handlung einer Funktion ausgeführt wird und dessen Ergebnis unverändert zurückgegeben wird. Bei TCO wird der aktuelle Stackrahmen eines Aufrufs nicht benötigt, sobald der Tail Call erfolgt, wodurch die maximale Stapelgröße nicht wächst.

Die Implementierung variiert je nach Sprache und Laufzeit. Häufig ersetzt der Compiler den aktuellen Rahmen durch

Nutzen der TailCallOptimierung liegt darin, rekursive Algorithmen effizient zu gestalten und Stacküberläufe zu vermeiden. Sie macht

Einschränkungen und Auswirkungen: TCO kann Debugging erschweren, da Stackspuren vereinfacht oder verändert werden. Mutual- oder rekursive

den
des
Aufrufer-Calls
oder
führt
den
Aufruf
in
einer
Schleife
aus.
In
Sprachen,
die
keine
direkte
TCO-Garantie
bieten,
kann
stattdessen
eine
Trampolin-
oder
Loop-Lösung
eingesetzt
werden.
Voraussetzung
ist,
dass
der
Tail
Call
in
der
Tailposition
steht
und
nach
dem
Aufruf
keine
weiteren
Berechnungen
anfallen.
rekursive
Strukturen
so
praktikabel
wie
Iterationen
und
ist
besonders
in
funktional
orientierten
Sprachen
verbreitet
(Beispiele:
Scheme,
Erlang,
Haskell).
Viele
imperative
Sprachen
garantieren
TCO
nicht,
oder
es
hängt
von
der
Implementierung
ab
(etwa
Java
und
die
JVM).
Muster
müssen
explizit
unterstützt
werden.
Zudem
können
Generators,
Ausnahmen
oder
bestimmte
Optimierungen
in
der
jeweiligen
Sprache
das
Verhalten
von
Tail
Calls
beeinflussen.