Existem três modos gerais de execução para línguas modernas de alto nível:
Interpretadas Quando o código escrito numa língua é interpretado, a sua sintaxe é lida e depois executada directamente, sem fase de compilação. Um programa chamado intérprete lê cada declaração de programa, seguindo o fluxo do programa, e depois decide o que fazer, e fá-lo. Um híbrido de um intérprete e um compilador compilam a declaração em código de máquina e executam-no; o código de máquina é então descartado, para ser interpretado de novo se a linha for executada novamente. Os intérpretes são geralmente as implementações mais simples do comportamento de uma língua, em comparação com as outras duas variantes aqui listadas. Compilado Quando o código escrito numa língua é compilado, a sua sintaxe é transformada numa forma executável antes de ser executado. Existem dois tipos de compilação: Geração de código de máquina Alguns compiladores compilam o código fonte directamente em código de máquina. Este é o modo original de compilação, e as linguagens que são directa e completamente transformadas em código nativo da máquina desta forma podem ser chamadas linguagens verdadeiramente compiladas. Ver linguagem de montagem. Representações intermédias Quando o código escrito numa língua é compilado para uma representação intermédia, essa representação pode ser optimizada ou guardada para posterior execução sem necessidade de reler o ficheiro-fonte. Quando a representação intermédia é guardada, pode ser numa forma como o bytecode. A representação intermédia deve então ser interpretada ou compilada para a sua execução posterior. As máquinas virtuais que executam directamente o bytecode ou o transformam em código de máquina esbatem a distinção, outrora clara, entre representações intermédias e línguas verdadeiramente compiladas. Código de fonte a fonte traduzido ou transcompilado escrito numa língua pode ser traduzido em termos de uma língua de nível inferior para a qual os compiladores de código nativo já são comuns. JavaScript e a língua C são alvos comuns para tais tradutores. Ver CoffeeScript, Chicken Scheme, e Eiffel como exemplos. Especificamente, o código C e C++ gerado pode ser visto (como gerado a partir da linguagem Eiffel quando se utiliza o IDE EiffelStudio) no directório EIFGENs de qualquer projecto Eiffel compilado. No Eiffel, o processo traduzido é referido como transcompilação ou transcompilação, e o compilador Eiffel como um transcompilador ou compilador de fonte a fonte.
Nota que as línguas não são línguas estritamente interpretadas ou compiladas. Pelo contrário, as implementações do comportamento linguístico utilizam a interpretação ou a compilação. Por exemplo, ALGOL 60 e Fortran foram ambos interpretados (apesar de terem sido compilados mais tipicamente). Da mesma forma, Java mostra a dificuldade de tentar aplicar estas etiquetas a linguagens, em vez de implementações; Java é compilado para bytecode que é depois executado por interpretação (numa máquina virtual Java (JVM)) ou compilação (tipicamente com um compilador just-in-time como o HotSpot, novamente numa JVM). Além disso, a compilação, transcompilação e interpretação não está estritamente limitada apenas a uma descrição do artefacto compilador (executável binário ou montagem IL).
Arquitectura de computador de linguagem de alto nívelEditar
Alternativamente, é possível que uma linguagem de alto nível seja directamente implementada por um computador – o computador executa directamente o código HLL. Isto é conhecido como uma arquitectura informática de linguagem de alto nível – a própria arquitectura informática é concebida para ser orientada por uma linguagem específica de alto nível. Os grandes sistemas Burroughs eram máquinas alvo para ALGOL 60, por exemplo.