A versão mais antiga do GCC foi compilada usando outro compilador C, pois havia outras quando ele foi gravado. O primeiro compilador C de todos os tempos (ca. 1973, IIRC) foi implementado no assembly PDP-11 ou na linguagem de programação B que o precedeu, mas, em qualquer caso, o compilador B foi escrito em assembly.Da mesma forma, o primeiro compilador C ++ (CPre / Cfront , 1979-1983) provavelmente foi implementado primeiro em C, depois reescrito em C ++.
Quando você compila o GCC ou qualquer outro compilador de hospedagem automática, a ordem completa de criação é:
- Crie uma nova versão do GCC com o compilador C existente
- recrie a nova versão do GCC com a que você acabou de criar
- (opcional) repita a etapa 2 para fins de verificação.
Esse processo é chamado de inicialização . Ele testa a capacidade do compilador de se compilar e garante que o compilador resultante seja construído com todas as otimizações que ele próprio implementa.
Edição : Drew Dormann, nos comentários, aponta para o relato de Bjarne Stroustrup sobre a implementação mais antiga do C ++ . Foi implementado em C ++, mas traduzido pelo que Stroustrup chama de "pré-processador" de C ++ para C; não é um compilador completo por sua definição, mas ainda assim o C ++ foi inicializado em C.