Om een taal op hoog niveau (zoals Python, Java, C++, etc.) om te zetten in machinecode zodat deze kan worden uitgevoerd, heb je een proces nodig dat een of meer van de volgende stappen omvat:
1. Compilatie: Een compiler vertaalt het volledige programma op hoog niveau in machinecode (of soms in assemblagecode, die vervolgens wordt samengevoegd in machinecode) *voor* uitvoering. Dit resulteert in een uitvoerbaar bestand dat rechtstreeks door de processor van de computer kan worden uitgevoerd. Gecompileerde talen bieden over het algemeen betere prestaties dan geïnterpreteerde talen. Voorbeelden van compilers zijn GCC (voor C/C++) en javac (voor Java).
2. Interpretatie: Een tolk vertaalt en voert het programma op hoog niveau regel voor regel (of statement) uit. Het produceert geen afzonderlijk uitvoerbaar bestand; in plaats daarvan wordt de code direct uitgevoerd terwijl deze wordt vertaald. Dit is over het algemeen langzamer dan compilatie, maar biedt meer flexibiliteit, vooral voor dynamische talen. Python en Javascript zijn voornamelijk geïnterpreteerde talen, hoewel er enkele just-in-time (JIT) compilatietechnieken worden gebruikt om de prestaties te verbeteren.
3. Just-in-Time (JIT)-compilatie: Deze hybride aanpak combineert aspecten van compilatie en interpretatie. De code wordt in eerste instantie geïnterpreteerd, maar vaak uitgevoerde delen worden gecompileerd in machinecode voor een snellere uitvoering bij volgende runs. Java's JVM (Java Virtual Machine) en sommige moderne JavaScript-engines (zoals V8 in Chrome) gebruiken JIT-compilatie.
Samenvattend is de kernvereiste een vertaler (compiler of tolk, of een systeem dat beide gebruikt). De vertaler neemt de broncode op hoog niveau als invoer en produceert direct uitvoerbare machinecode of een tussenrepresentatie die verder kan worden verwerkt tot machinecode. Deze vertaler moet de syntaxis en semantiek van de taal op hoog niveau en de architectuur van de doelmachine (bijvoorbeeld x86, ARM) begrijpen. Ondersteunende tools zoals linkers (om meerdere gecompileerde modules te combineren) en assemblers (om assemblagecode naar machinecode om te zetten) kunnen ook bij het algehele proces betrokken zijn. |