Co to jest kompilator wsadowy?

28

Mam następujący cytat z kursu mojego kompilatora (w kontekście kolorowania grafów):

Ponieważ jest wolny, kolorowanie wykresów jest zwykle stosowane w kompilatorach wsadowych, podczas gdy skanowanie liniowe jest zwykle stosowane w kompilatorach JIT.

Nie mogłem znaleźć jasnej definicji online. Co sprawia, że ​​kompilator jest kompilatorem wsadowym?

Rodrigo
źródło
To pytanie jest tutaj nie na temat. softwareengineering.stackexchange.com jest lepszym miejscem do zapytania
Basile Starynkevitch

Odpowiedzi:

42

Kompilator JIT (Just-In-Time) kompiluje kod w czasie wykonywania, tj. Podczas działania programu. Dlatego koszt kompilacji jest częścią czasu wykonania programu i dlatego należy ją zminimalizować.

Przeciwieństwem tego jest kompilator wyprzedzający (AOT), który jest w zasadzie synonimem „kompilatora wsadowego”. Konwertuje to kod źródłowy na kod maszynowy, a następnie dystrybuowany jest tylko kod maszynowy. Dlatego kompilator może działać bardzo wolno, ponieważ nie wpływa na czas wykonywania wynikowego programu.

W dzisiejszych czasach, gdy ludzie mówią „kompilator”, zwykle mają na myśli kompilator AOT. Rzeczywiście, pojęcie „kompilator AOT” zaczęło być popularne stosunkowo niedawno, gdy ludzie zaczęli tworzyć kompilatory AOT dla języków kompilowanych w JIT, zwłaszcza JavaScript. Wiele z tych języków, np. C #, kompiluje się do języka pośredniego dla maszyny wirtualnej, która jest następnie kompilowana w JIT do kodu maszynowego w czasie wykonywania. Termin „kompilator AOT” ma konotację, że kod źródłowy zostanie skompilowany bezpośrednio do kodu maszynowego, dlatego w czasie wykonywania nie jest wymagana żadna forma kompilacji JIT.

„Kompilator wsadowy” jest w tym momencie trochę archaicznym terminem. Prawdziwym przeciwieństwem kompilatora wsadowego, gdy termin był popularny, był kompilator przyrostowy . Kompilacja przyrostowa jest często kojarzona z językami takimi jak Lisp, w których posiadasz REPL i możesz interaktywnie poprosić o implementację języka, aby skompilował określoną funkcję. Jeśli funkcja została wykonana, której kompilacji nie zażądano wcześniej, zwykle byłaby interpretowana. Natomiast kompilator wsadowy skompilował wszystkie funkcje jednocześnie, tj. Wsadowo.

Derek Elkins
źródło
1
A w dawnych czasach, gdy nie działasz interaktywnie, musiałeś przesłać zadanie do kolejki wsadowej, aby skompilować swój program
Neuromancer
Niektóre implementacje językowe (awk GNU, cpython i tak dalej) kompilują cały wkład do wewnętrznej reprezentacji jako pierwszy krok w czasie wykonywania, który miesza niektóre z opisanych tutaj właściwości.
dmckee
1
@dmckee większość, jeśli nie wszystkie implementacje językowe, w rzeczywistości
user253751
Kolejna dwuznaczność: w systemach operacyjnych MSDOS istniały narzędzia zwane kompilatorami wsadowymi, te skompilowane pliki wsadowe w pliki wykonywalne ....
rackandboneman
Oczywiście zawsze istnieje wewnętrzna reprezentacja. Ale czasami jest to język sam w sobie, jak w Gcc, Llvm lub .Net. Jest to spowodowane architekturą front-end / middle / back-end, front-endem przekształcającym język (C, C ++, Java, fortran ..) we wspólny język niższego poziomu, następnie uruchamiane są algorytmy optymalizacji i wreszcie ten zoptymalizowany kod we wspólnym języku jest przekształcany przez back-end w kod bajtowy lub asembler, bibliotekę wykonywalną lub bibliotekę statyczną lub dynamiczną.
zjeżdża
11

Znaczenie jest sugerowane w cytowanym przez Ciebie cytacie! Wynika to z przetwarzania wsadowego terminu obliczeniowego, które jest używane, gdy zadanie nie jest wykonywane w czasie rzeczywistym, ale zostało zaplanowane do późniejszego wykonania przez system operacyjny, gdy obciążenie (często dla działań w czasie rzeczywistym) jest mniejsze.

Kompilator wsadowy to taki, który wykonuje kompilację, gdy użytkownik nie czeka na wynik kompilacji. Można powiedzieć, że przy użyciu bardziej nowoczesnej terminologii wykonanej w tle.

Jest to odwrotność JIT (Just-In-Time), który jest wykonywany „na żywo” w dokładnie takiej chwili, w której jest potrzebny, bez luksusu spędzania dodatkowego czasu na dokładniejszym przetwarzaniu.

Niższą prędkość kompilacji wsadowej można zilustrować następująco:

wprowadź opis zdjęcia tutaj

Źródło: https://xkcd.com/303/

Lub nawet to:

wprowadź opis zdjęcia tutaj

Źródło: http://dilbert.com/strip/2013-06-22

Brian Tompsett - 汤 莱恩
źródło