Linguaggio compilato
I programmi compilati in codice nativo a tempo di compilazione tendono ad essere più veloci di quelli tradotti a runtime a causa dell’overhead del processo di traduzione. Le nuove tecnologie come la compilazione just-in-time e i miglioramenti generali nel processo di traduzione stanno iniziando a ridurre questo divario, però. Le soluzioni miste che usano il bytecode tendono verso un’efficienza intermedia.
I linguaggi di programmazione di basso livello sono tipicamente compilati, specialmente quando l’efficienza è la preoccupazione principale, piuttosto che il supporto multipiattaforma. Per tali linguaggi, ci sono più corrispondenze uno-a-uno tra il codice programmato e le operazioni hardware eseguite dal codice macchina, rendendo più facile per i programmatori controllare l’uso dell’unità centrale di elaborazione (CPU) e della memoria in dettaglio.
Con qualche sforzo, è sempre possibile scrivere compilatori anche per linguaggi tradizionalmente interpretati. Per esempio, Common lisp può essere compilato in bytecode Java (poi interpretato dalla macchina virtuale Java), in codice C (poi compilato in codice macchina nativo), o direttamente in codice nativo. I linguaggi di programmazione che supportano più obiettivi di compilazione danno agli sviluppatori più controllo per scegliere o la velocità di esecuzione o la compatibilità multipiattaforma.