In Andrew W. Appels Buch Modern Compiler Implementation in ML sagt er unter Kapitel 17, dass die Computability-Theorie zeigen wird, dass es immer möglich sein wird, neue Optimierungstransformationen zu erfinden, und fährt fort, um zu beweisen, dass ein vollständig optimierter Compiler das Halteproblem lösen wird: Ein Programm Q , das keine Ausgabe erzeugt und niemals anhält, kann leicht durch seine optimale Darstellung ersetzt werden, wobei Opt (Q) "L: goto L" ist. Ein vollständig optimierter Compiler kann also das Problem des Anhaltens lösen.
Meine Frage lautet also: Gibt es einen vollständig optimierenden Compiler zum Beenden von Programmen? Meine einzigen Gedanken sind die folgenden: Obwohl ein Programm garantiert terminiert, kann es immer noch beliebig komplex sein, und für jeden konkreten Optimierungs-Compiler, C, könnte man vielleicht ein Programm konstruieren, das C als Eingabe nimmt und irgendwie ein schlechteres Programm erzeugt als eine Art Eckkoffer.
Auch Was sind die Auswirkungen der Beschränkung selbst Programme beendet?
quelle
Antworten:
Ich gehe davon aus, dass Sie an der Optimierung der Laufzeit interessiert sind. Wie ich in meinem Kommentar geschrieben habe, gibt das das Ziel nicht ausreichend vor: Reduziert eine Optimierung die Laufzeit für jede Eingabe, für jede Eingabe, für alle Eingaben im ungünstigsten Fall oder sogar für den Durchschnitt ?
Ich werde zeigen, dass sie alle unmöglich sind. Der Beweis erstreckt sich auf die Optimierung der Länge des Programms.
Denken Sie daran, dass das folgende Problem nicht berechenbar ist:
Beachten Sie außerdem, dass wir bei einer kontextfreien Grammatik den CYK-Algorithmus für diese eine Grammatik fest codieren können; bezeichnen diesen Algorithmus durch C Y K G . Wir beobachten , dass C Y K G für alle Eingänge endet (von Σ * ).G C Y KG C Y KG Σ∗
Es sei nun angenommen, dass es einen Optimierer , der bei einem immer abschließenden Algorithmus A einen ergebnisäquivalenten Algorithmus ausgibt, der in Bezug auf die Laufzeit optimal ist. Deutlich,Opt EIN
und so haben wir einen Entscheider für ein unberechenbares Problem konstruiert, der der Annahme widerspricht.
quelle