CoffeeScript compila JavaScript per un motivo molto semplice, JavaScript è di fatto il linguaggio lato client e sarebbe irragionevole aspettarsi che i produttori di browser supportino nativamente CoffeeScript, quando tutto ciò che offre è una sintassi alternativa.
In un modo molto simile, il punto principale del linguaggio di alto livello per i traduttori C è la portabilità immediata, in quanto esiste un compilatore C per quasi tutte le piattaforme e un'abbondanza di librerie C. Vala , ad esempio, era progettato per :
- essere un compilatore per GObject ,
- crea eseguibili nativi (tramite il compilatore C della macchina),
- automatizza il conteggio dei riferimenti e
- è ancora accessibile ai programmatori di GNOME C
GNOME è un progetto tradizionalmente orientato al C e GObject è scritto specificamente in C, probabilmente non troverà molto amore tra gli sviluppatori di GNOME se compilato su un codice macchina, indipendentemente dalla sua natura più amichevole (e dalla sintassi). Non tutti sembravano gradire la sintassi, al punto che un'altra lingua, Genie , era stata creata per migliorarla.
Per un esempio di C ++, Facebook ha sviluppato HipHop , un traduttore da PHP a C ++. Stavano cercando di risolvere un problema molto specifico, l'utilizzo della CPU, senza dover sostituire tutto il codice PHP e riqualificare i loro ingegneri (o, peggio, sostituirli). Questo è un esempio molto più specifico, dato che i problemi di scalabilità di Facebook sono, ovviamente, unici e di nuovo l'accesso al codice C ++ intermedio può essere utile, poiché le estensioni PHP sono scritte in C e C ++.
Quindi un traduttore da un linguaggio di alto livello ad un altro è una buona idea soprattutto quando è richiesto l'accesso al codice intermedio. Per CoffeeScript, il codice JavaScript è necessario a causa dell'ampia adozione del browser e per Vala, Genie e HipHop a causa della base di codice esistente. Ovviamente avere accesso al codice intermedio significa che è possibile ottimizzarlo ulteriormente se necessario.
Ma parlando generalmente , non sarebbe una buona idea costruire una lingua che si traduca in C o in qualsiasi altra lingua, se non si ha alcun uso del codice risultante. Ci sono così tante lingue là fuori, se non riesci a far fronte a C, scegli un altro. Per coincidenza, il primo compilatore C ++ scritto da Bjarne Stroustrup, CFront, era un traduttore C con Classi-C, ma questo era principalmente dovuto al fatto che, come nuovo linguaggio, era impossibile bootstrap C con Classes.