Was ist ein Batch-Compiler?


28

Ich habe das folgende Zitat aus dem Kurs meines Compilers (im Zusammenhang mit der Grafikfärbung):

Da es langsam ist, wird die Grafikfarbe in Batch-Compilern verwendet, während der lineare Scan in JIT-Compilern verwendet wird.

Ich konnte online keine klare Definition finden. Was macht einen Compiler zu einem Batch-Compiler?


Diese Frage ist hier nicht aktuell. softwareengineering.stackexchange.com ist ein besserer Ort, um zu fragen
Basile Starynkevitch

Antworten:


42

Ein JIT-Compiler (Just-In-Time) kompiliert den Code zur Laufzeit, dh während das Programm ausgeführt wird. Daher sind die Kosten für die Kompilierung Teil der Ausführungszeit des Programms und sollten daher minimiert werden.

Das Gegenteil davon ist ein AOT-Compiler, der im Grunde genommen ein Synonym für "Batch-Compiler" ist. Dadurch wird der Quellcode in Maschinencode konvertiert und nur der Maschinencode verteilt. Daher kann der Compiler sehr langsam sein, da er die Ausführungszeit des resultierenden Programms nicht beeinflusst.

Wenn Leute heutzutage "Compiler" sagen, meinen sie typischerweise einen AOT-Compiler. Tatsächlich wurde der Begriff "AOT-Compiler" erst relativ spät populär, als Leute anfingen, AOT-Compiler für JIT-kompilierte Sprachen, insbesondere JavaScript, zu entwickeln. Viele dieser Sprachen, z. B. C #, werden zu einer Zwischensprache für eine VM kompiliert, die dann zur Laufzeit mit JIT zu Maschinencode kompiliert wird. Der Begriff "AOT-Compiler" hat die Konnotation, dass der Quellcode direkt in Maschinencode kompiliert wird, sodass zur Laufzeit keine Form der JIT-Kompilierung erforderlich ist.

"Batch Compiler" ist an dieser Stelle ein archaischer Begriff. Der wirkliche Gegensatz zu einem Stapelcompiler, als der Begriff populär war, war ein inkrementeller Compiler . Inkrementelle Kompilierung wird häufig mit Sprachen wie Lisp in Verbindung gebracht, in denen Sie eine REPL hatten, und Sie können die Sprachimplementierung interaktiv anfordern, um eine bestimmte Funktion zu kompilieren. Wenn eine Funktion ausgeführt wurde, deren Kompilierung noch nicht angefordert wurde, wird sie normalerweise interpretiert. Ein Batch-Compiler hat dagegen alle Funktionen auf einmal übersetzt, also in einem Batch.


1
Und früher mussten Complier überhaupt nicht interaktiv ausgeführt werden, um ein Programm zu kompilieren
Neuromancer

Einige Sprachimplementierungen (awk, cpython usw. von GNU) kompilieren die gesamte Eingabe zur Laufzeit als ersten Schritt in eine interne Repräsentation, in der einige der hier beschriebenen Eigenschaften gemischt werden.
dmckee

1
@ dmckee die meisten, wenn nicht alle
Sprachimplementierungen

Eine weitere Unklarheit: Für MSDOS-Betriebssysteme gab es Tools, sogenannte Batch-Compiler. Diese kompilierten Batch-Dateien wurden in ausführbare Dateien umgewandelt ....
rackandboneman

Natürlich gibt es immer eine interne Vertretung. Aber manchmal ist es eine eigene Sprache, wie in Gcc, Llvm oder .Net. Dies ist auf die Front-End- / Middle- / Back-End-Architektur zurückzuführen, bei der das Front-End die Sprache (C, C ++, Java, fortran ..) in eine gemeinsame Sprache niedrigerer Ebene umwandelt und anschließend die Optimierungsalgorithmen ausgeführt werden Schließlich wird dieser optimierte Code in der gemeinsamen Sprache vom Back-End in Bytecode oder Assembler, ausführbare oder statische oder dynamische Bibliothek umgewandelt.
Wiederholung am

11

Die Bedeutung ist in dem von Ihnen gegebenen Zitat enthalten! Dies ergibt sich aus dem Rechenbegriff Stapelverarbeitung, der verwendet wird, wenn die Aufgabe nicht in Echtzeit ausgeführt wird, sondern für eine spätere Ausführung durch das Betriebssystem geplant ist, wenn die Last (häufig für Echtzeitaktivitäten) geringer ist.

Ein Stapelcompiler führt die Kompilierung durch, wenn ein Benutzer nicht auf das Ergebnis der Kompilierung wartet. Wir würden sagen, dass dies mit moderneren Begriffen im Hintergrund geschieht.

Dies ist die Umkehrung einer JIT (Just-In-Time), die "live" zum richtigen Zeitpunkt ausgeführt wird, ohne den Luxus zu haben, zusätzliche Zeit für eine gründlichere Verarbeitung aufzuwenden.

Die langsamere Geschwindigkeit der Stapelkompilierung lässt sich folgendermaßen veranschaulichen:

Bildbeschreibung hier eingeben

Quelle: https://xkcd.com/303/

Oder auch das:

Bildbeschreibung hier eingeben

Quelle: http://dilbert.com/strip/2013-06-22

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.