O CoffeeScript é compilado no JavaScript por um motivo muito simples, o JavaScript é a linguagem de fato do lado do cliente e não seria razoável esperar que os fornecedores de navegadores suportem nativamente o CoffeeScript, quando tudo o que ele oferece é uma sintaxe alternativa.
De uma maneira muito semelhante, o ponto principal da linguagem de alto nível para os tradutores C é a portabilidade imediata, pois há um compilador C para quase todas as plataformas e uma abundância de bibliotecas C. Vala , por exemplo, foi projetado para :
- ser um compilador para o GObject ,
- construir executáveis nativos (através do compilador C da máquina),
- automatizar a contagem de referência e
- ainda estar acessível aos programadores do GNOME C
O GNOME é um projeto tradicionalmente orientado para C e o GObject é especificamente escrito em C. Vala provavelmente não encontraria muito amor entre os desenvolvedores do GNOME se fosse compilado com código de máquina, independentemente de sua natureza mais amigável (e sintaxe). Nem todos pareciam gostar da sintaxe, a ponto de outra linguagem, Genie , ter sido criada para aprimorá-la.
Para um exemplo de C ++, o Facebook desenvolveu o HipHop , um tradutor de PHP para C ++. Eles estavam tentando resolver um problema muito específico, o uso da CPU, sem ter que substituir todo o código PHP e treinar novamente os engenheiros (ou pior, substituí-los). Este é um exemplo muito mais específico, pois os problemas de escalabilidade do Facebook são únicos e também ter acesso ao código C ++ intermediário pode ser útil, pois as extensões PHP são escritas em C e C ++.
Portanto, um tradutor de um idioma de alto nível para outro é uma boa ideia, principalmente quando você precisa acessar o código intermediário. Para o CoffeeScript, o código JavaScript é necessário devido à ampla adoção do navegador e para Vala, Genie e HipHop, devido à base de código existente. Obviamente, ter acesso ao código intermediário significa que você pode otimizá-lo ainda mais, se necessário.
Mas, de um modo geral, não seria uma boa idéia criar um idioma que se traduza em C ou qualquer outro idioma, se você não utilizasse o código resultante. Existem tantos idiomas por aí, se você não consegue lidar com C, basta escolher um outro. Coincidentemente, o primeiro compilador C ++ escrito por Bjarne Stroustrup, CFront, era um C com tradutor Classes para C, mas isso ocorreu principalmente porque, como uma nova linguagem, era impossível inicializar C com Classes.