CoffeeScript si compila in JavaScript per una ragione molto semplice, JavaScript è il linguaggio lato client di fatto e sarebbe irragionevole aspettarsi che i fornitori 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 con i traduttori C è la portabilità immediata, poiché esiste un compilatore C per quasi tutte le piattaforme e un'abbondanza di librerie C. Vala , ad esempio, è stato progettato per :
- essere un compilatore per GObject ,
- costruire eseguibili nativi (tramite il compilatore C della macchina),
- automatizzare il conteggio dei riferimenti e
- essere ancora accessibile ai programmatori GNOME C.
GNOME è un progetto tradizionalmente orientato al C e GObject in particolare è scritto in C, probabilmente Vala non troverebbe molto amore tra gli sviluppatori GNOME se compilato per codice macchina, indipendentemente dalla sua natura più amichevole (e sintassi). Non tutti sembravano gradire la sintassi, al punto che un'altra lingua, Genie , era stata costruita per migliorarla.
Per un esempio 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 loro codice PHP e riqualificare i loro ingegneri (o peggio, sostituirli). Questo è un esempio molto più specifico, poiché i problemi di scalabilità di Facebook sono, beh, unici, e di nuovo avere accesso al codice C ++ intermedio può essere utile, poiché le estensioni PHP sono scritte in C e C ++.
Quindi un traduttore da una lingua di alto livello a un'altra è una buona idea soprattutto quando è richiesto l'accesso al codice intermedio. Per CoffeeScript, il codice JavaScript è necessario a causa della sua 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 in generale , non sarebbe una buona idea costruire una lingua che si traduca in C, o in qualsiasi altra lingua, se non si usasse il codice risultante. Ci sono così tante lingue là fuori, se non riesci a farcela con C, scegline un'altra. Per coincidenza, il primo compilatore C ++ scritto da Bjarne Stroustrup, CFront, era un traduttore da C con Classi in C, ma principalmente perché, come nuovo linguaggio, era impossibile avviare C con Classi.