एक JIT (जस्ट-इन-टाइम) कंपाइलर रन-टाइम पर कोड संकलित करता है, जैसा कि प्रोग्राम चल रहा है। इसलिए संकलन की लागत कार्यक्रम के निष्पादन समय का हिस्सा है, और इसलिए इसे कम से कम किया जाना चाहिए।
इसके विपरीत एक आगे का समय (एओटी) संकलक है जो मूल रूप से "बैच संकलक" का पर्याय है। यह स्रोत कोड को मशीन कोड में परिवर्तित करता है और फिर मशीन कोड वितरित किया जाता है। इसलिए, संकलक बहुत धीमा हो सकता है क्योंकि यह परिणामी कार्यक्रम के निष्पादन समय को प्रभावित नहीं करता है।
आजकल, जब लोग "कंपाइलर" कहते हैं, तो उनका मतलब आमतौर पर एओटी कंपाइलर होता है। दरअसल, शब्द "एओटी कंपाइलर" वास्तव में हाल ही में लोकप्रिय होना शुरू हुआ जब लोगों ने जेआईटी संकलित भाषाओं, विशेष रूप से जावास्क्रिप्ट के लिए एओटी संकलक बनाना शुरू किया। इनमें से कई भाषाएं, जैसे C #, एक VM के लिए एक मध्यवर्ती भाषा का संकलन है जो कि तब JIT रन-टाइम पर मशीन कोड के लिए संकलित की जाती है। शब्द "एओटी कंपाइलर" का अर्थ है कि स्रोत कोड को सीधे मशीन कोड में संकलित किया जाएगा, इसलिए रन-टाइम में जेआईटी संकलन का कोई भी रूप आवश्यक नहीं है।
"बैच कंपाइलर" इस बिंदु पर थोड़ा पुरातन शब्द है। एक बैच संकलक के लिए वास्तविक विपरीत जब यह शब्द लोकप्रिय था एक वृद्धिशील संकलक था । वृद्धिशील संकलन अक्सर लिस्प जैसी भाषाओं के साथ जुड़ा होता है जहां आपके पास एक आरईपीएल था और आप विशिष्ट कार्य को संकलित करने के लिए भाषा कार्यान्वयन के लिए अनुरोध कर सकते हैं। यदि कोई फ़ंक्शन निष्पादित किया गया था जिसका संकलन पहले अनुरोध नहीं किया गया था, तो इसे आमतौर पर व्याख्या किया जाएगा। एक बैच संकलक, इसके विपरीत, एक ही बार में सभी कार्यों को संकलित करता है, अर्थात एक बैच में।