Frage

Angenommen, Sie benötigen einen C-Compiler.Es wäre vorzuziehen, diesen Compiler in eine c-ähnliche Sprache zu schreiben, angesichts der Komplexität eines Compilers dieses Grades.Im besten Fall würde der C-Compiler in c geschrieben, aber das würde ein C-Compiler anfangen, mit dem ein C-Compiler beginnt.Wenn ein Fehler bei der Herstellung eines der frühen Iterationen von Compilern vorgenommen wird, könnte es propagieren.Wie stellen Compiler sicher, dass dies nicht passiert?Natürlich ist kein Code einwandfrei, nicht einmal der Prozessor ist, aber wenn Sie nicht irgendwie die Stabilität gemessen haben, wissen Sie nicht einmal, ob Ihr Compiler stabil ist.Welche Annahmen werden gemacht und wie ist es gerechtfertigt?Ich würde mir vorstellen, dass es auch architekturabhängig wäre.

edit: Durch die Stabilität meine ich, dass der Code wie beabsichtigt läuft.

War es hilfreich?

Lösung

Das Wort, das Compiler-Autoren dafür verwenden, ist "Konformität".Ein Compiler, der die Sprachspezifikation korrekt implementiert, ist anpassungsfähig.Es gibt Unternehmen, die im Rahmen ihres Unternehmens Konformitätstests für verschiedene Standards verkaufen, einschließlich der Programmiersprachen.

Es ist selten, dass Fehler durch den Unfall von Compilergenerationen ausbreitet (obwohl es ist absichtlich passiert ).

Andere Tipps

Es passiert, dass Compiler subtile Fehler enthalten.Keine klügtigen Fehler, da klassifische Fehler erkannt und behoben werden.

Ein Compiler, der selbst von einem Compiler mit subtilen Fehlern zusammengestellt ist, neigt dazu, kranke Fehler zu haben.Sie werden leicht erkennen, weil sie so krankhaft sind.Sie werden schwer zu reparieren sein, da diese klügtigen Fehler von perfekt feinem Quellcode produziert werden, so dass derjenige, der es beheben möchte, dass es schwierig ist, das eigentliche Problem zu finden.

Die Lösung besteht darin, einen Compiler ausreichender Qualität zu erstellen, dass Fehler sehr selten sind und innerhalb des Compilers extrem selten sind.Wir erwarten auch Compiler-Fehler, um einen sehr komplizierten Code zu beeinflussen, sodass der Compiler-Schriftsteller Code schreiben sollte, der einfach ist und gemeinsame Codierungsmuster folgt.

Eine Antwort ist das Testen, Testen, Tests.Z.B.GCC wird mit einem ständig wachsenden Satz von Tests geliefert, die jedes Mal geprüft werden, wenn der Compiler gebaut ist.Viele Compiler sind erforderlich, um den sogenannten Triple-Test weiterzuleiten: Kompiliercode für Ihren Compiler C mit Compiler A, der C_1 gibt;COMPILE C mit C_1 Geben Sie c_2, kompilieren c mit c_2, wobei c_3 ergibt.Jetzt wurden C_2 und C_3 mit C zusammengestellt und sollten gleich sein.Wenn nicht, ist etwas fischig los.

werfen Sie einen Blick auf den RegHher's "eingebettet in Wissenschaft" Blog, er ist einer der Leute, die um das herum arbeitenLLVM-Compiler-Tools und berührt regelmäßig auf den Werkzeugen und Techniken, die verwendet werden, um den Compiler dazu zu bringen, den Compiler besser (oder Automatisierung von Teilen dieses Gebäudes).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit cs.stackexchange
scroll top