CoffeeScript compila a JavaScript por una razón muy simple, JavaScript es el lenguaje del lado del cliente de facto y no sería razonable esperar que los proveedores de navegadores admitan nativamente CoffeeScript, cuando todo lo que ofrece es una sintaxis alternativa.
De manera muy similar, el punto principal del lenguaje de alto nivel para los traductores de C es la portabilidad inmediata, ya que hay un compilador de C para casi todas las plataformas y una gran cantidad de bibliotecas de C. Vala , por ejemplo, fue diseñado para :
- ser un compilador para el GObject ,
- construir ejecutables nativos (a través del compilador C de la máquina),
- automatizar el recuento de referencias, y
- aún estará accesible para los programadores de GNOME C
GNOME es un proyecto tradicionalmente orientado a C y GObject específicamente está escrito en C, Vala probablemente no encontraría mucho amor entre los desarrolladores de GNOME si se compilara en código máquina, independientemente de su naturaleza más amigable (y sintaxis). No a todos parecía gustarles la sintaxis, hasta el punto de que otro idioma, Genie , fue creado para mejorarlo.
Para un ejemplo de C ++, Facebook desarrolló HipHop , un traductor de PHP a C ++. Intentaban resolver un problema muy específico, el uso de la CPU, sin tener que reemplazar todo su código PHP y volver a capacitar a sus ingenieros (o peor aún, reemplazarlos). Este es un ejemplo mucho más específico, ya que los problemas de escalabilidad de Facebook son, bueno, únicos, y nuevamente tener acceso al código intermedio de C ++ puede ser útil, ya que las extensiones de PHP están escritas en C y C ++.
Por lo tanto, un traductor de un idioma de alto nivel a otro es una buena idea principalmente cuando se requiere acceso al código intermedio. Para CoffeeScript, el código JavaScript es necesario debido a su amplia adopción del navegador, y para Vala, Genie y HipHop debido a la base de código existente. Obviamente, tener acceso al código intermedio significa que puede optimizarlo aún más si es necesario.
Pero, en términos generales, no sería una buena idea construir un lenguaje que se traduzca a C, o cualquier otro lenguaje, si no utilizara el código resultante. Hay tantos lenguajes por ahí, que si no puede hacer frente a C, simplemente elija otro. Casualmente, el primer compilador de C ++ escrito por Bjarne Stroustrup, CFront, fue un traductor de C con Classes to C, pero eso se debió principalmente a que, como nuevo lenguaje, era imposible arrancar C con Classes.