Er zijn drie algemene uitvoeringswijzen voor moderne high-level talen:
Geïnterpreteerd Wanneer code die in een taal is geschreven, wordt geïnterpreteerd, wordt de syntaxis ervan gelezen en vervolgens direct uitgevoerd, zonder compilatiefase. Een programma, een interpreter genaamd, leest elke programma-instructie, volgt de programmastroom, besluit dan wat te doen, en doet het. Een hybride van een interpreter en een compiler compileert het statement in machinecode en voert die uit; de machinecode wordt dan weggegooid, om opnieuw te worden geïnterpreteerd als de regel opnieuw wordt uitgevoerd. Interpreters zijn gewoonlijk de eenvoudigste implementaties van het gedrag van een taal, vergeleken met de andere twee hier genoemde varianten. Gecompileerd Wanneer code geschreven in een taal wordt gecompileerd, wordt de syntax omgezet in een uitvoerbare vorm alvorens te worden uitgevoerd. Er zijn twee soorten compilatie: Machinecodegeneratie Sommige compilers compileren broncode rechtstreeks in machinecode. Dit is de oorspronkelijke manier van compileren, en talen die op deze manier rechtstreeks en volledig worden omgezet in machinecode, kunnen echt gecompileerde talen worden genoemd. Zie assembleertaal. Intermediaire representaties Wanneer code die in een taal is geschreven, wordt gecompileerd naar een intermediaire representatie, kan die representatie worden geoptimaliseerd of opgeslagen om later te worden uitgevoerd zonder dat het bronbestand opnieuw hoeft te worden gelezen. Wanneer de tussenliggende weergave wordt opgeslagen, kan dit in een vorm zoals bytecode zijn. De tussenliggende representatie moet dan worden geïnterpreteerd of verder worden gecompileerd om haar uit te voeren. Virtuele machines die bytecode rechtstreeks uitvoeren of deze verder omzetten in machinecode hebben het ooit duidelijke onderscheid tussen intermediaire representaties en echt gecompileerde talen vervaagd. Source-to-source vertaald of getranscompileerd Code die in een taal is geschreven, kan worden vertaald in termen van een taal van een lager niveau waarvoor reeds native code compilers bestaan. JavaScript en de taal C zijn veel voorkomende doelen voor dergelijke vertalers. Zie CoffeeScript, Chicken Scheme, en Eiffel als voorbeelden. In het bijzonder kan de gegenereerde C en C++ code worden gezien (zoals gegenereerd vanuit de Eiffel taal bij gebruik van de EiffelStudio IDE) in de EIFGENs directory van elk gecompileerd Eiffel project. In Eiffel wordt het vertaalproces aangeduid als transcompileren of transcompileren, en de Eiffel compiler als een transcompiler of bron-naar-bron compiler.
Merk op dat talen geen strikt geïnterpreteerde talen of gecompileerde talen zijn. In plaats daarvan maken implementaties van taalgedrag gebruik van interpreteren of compileren. Bijvoorbeeld, ALGOL 60 en Fortran zijn beide geïnterpreteerd (hoewel ze meer typisch gecompileerd waren). Ook Java laat zien hoe moeilijk het is om deze labels toe te passen op talen, in plaats van op implementaties; Java wordt gecompileerd tot bytecode die vervolgens wordt uitgevoerd door ofwel interpreteren (in een Java virtual machine (JVM)) of compileren (typisch met een just-in-time compiler zoals HotSpot, ook in een JVM). Bovendien is compileren, transcompileren en interpreteren niet strikt beperkt tot alleen een beschrijving van het compiler artefact (binary executable of IL assembly).
High-level language computer architectureEdit
Aternatief is het mogelijk om een high-level taal direct door een computer te laten implementeren – de computer voert de HLL code direct uit. Dit staat bekend als een high-level language computer architectuur – de computer architectuur zelf is ontworpen om te worden gericht door een specifieke high-level taal. De grote systemen van Burroughs waren bijvoorbeeld doelmachines voor ALGOL 60.