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.