Compiler, interpreter en JIT: uitvoeringsmethoden vergeleken
Er zijn drie hoofdmanieren om broncode uit te voeren. Een compiler (ahead-of-time, AOT) vertaalt het hele programma naar machinecode vóór het wordt uitgevoerd. Een interpreter leest en voert het programma uit terwijl het draait, zonder een bestand met machinecode te maken. Een JIT-compiler (just-in-time) begint met interpreteren en compileert veelgebruikte delen tijdens het uitvoeren naar machinecode. Veel talen combineren deze methoden.
| Kenmerk | Compiler (AOT) | Interpreter | JIT-compiler |
|---|---|---|---|
| Moment van vertalen | Vóór de uitvoering. Het hele programma wordt machinecode | Tijdens de uitvoering. Het programma wordt gelezen en stap voor stap uitgevoerd | Tijdens de uitvoering. Veelgebruikte code wordt naar machinecode gecompileerd |
| Opstarten | Start snel (maar eerst moet worden gebouwd) | Start snel. Bouwen is niet nodig | In het begin langzaam, tot de code is opgewarmd (warm-up) |
| Uitvoeringssnelheid | Het snelst en voorspelbaar | Het langzaamst. Vaak vele malen langzamer dan gecompileerde code | Na de warm-up dicht bij gecompileerde snelheid, en soms sneller door gebruik van runtime-informatie |
| Portabiliteit | Per platform is een binary nodig | Goed portabel. Werkt overal waar de interpreter beschikbaar is | Portabele bytecode en een runtime per platform |
| Foutdetectie | Veel fouten worden bij het compileren gevonden | Fouten komen naar voren als de betreffende regel wordt uitgevoerd | Afhankelijk van de taal |
| Geheugengebruik | Weinig runtime-overhead | De interpreter zelf blijft in het geheugen | Extra geheugen voor de compiler en de cache met gecompileerde code |
| Ontwikkelworkflow | Bewerken, bouwen, uitvoeren | Bewerken en direct uitvoeren | Meestal bewerken en uitvoeren, of bouwen naar bytecode |
| Typische talen | C, C++, Rust, Go | Traditioneel Python (CPython), Ruby, shellscripts | Java (HotSpot), JavaScript (V8), C# (.NET), PyPy |
De getalswaarden zijn typische ordegroottes en variëren per procesgeneratie en product.