Para compilar o que para quê? Um compilador transforma um código-fonte de um idioma ( idioma de origem) para outro (idioma de destino), o que não indica nada sobre o baixo nível do idioma de destino.
- O CoffeeScript é compilado em JavaScript, o compilador sendo escrito em CoffeeScript.
- O script # compila C # em JavaScript, o compilador sendo escrito, se bem me lembro, C #.
- etc.
O idioma que você escolhe para escrever um compilador depende do contexto. Por exemplo, trabalhando em um projeto que compila uma linguagem derivada do PHP para um código PHP nativo, usei uma mistura de PHP e C # para escrever o compilador, porque fazia mais sentido para mim, dadas minhas habilidades. Outra pessoa escolheria Python, Java e PHP, ou C ++ com um pouco de JavaScript, ou qualquer outra coisa.
C ou C ++ é uma escolha popular devido ao suporte de ferramentas relacionadas ao compilador (veja a resposta de Telastyn) e porque esses dois idiomas permitem que você seja realmente nativo. Mas não há nada errado em escolher outro idioma.
Observe que, para ser mais nerd , você pode escolher o idioma de origem para escrever o próprio compilador. Foi o que aconteceu com o compilador CoffeeScript e muitos outros compiladores. Também é popular entre os IDEs: um dos primeiros Visual Studio foi criado usando o mesmo Visual Studio.