Desde a versão 4.8, o compilador C ++ GCC (a parte G ++) não é mais escrito em C, mas no próprio C ++. Eu tenho uma pergunta hipotética sobre isso.
Gostaria de saber como compilar o código C ++ do GCC em uma nova plataforma que ainda não possui um compilador C ++. Obviamente, você pode usar binários pré-criados compilados em outras máquinas. Ou você pode usar uma versão mais antiga do GCC que foi escrita em C e compilar a versão atual.
No entanto, sem os binários pré-criados e apenas a versão mais recente, você estava preso, certo? Caso contrário, existem outras implicações nessa situação suscitadas pela mudança de C para C ++ do projeto GCC?
gcc
antes da versão 4.8 pudesse ser criada com o compilador C empacotado com um sistema operacional arbitrário (e isso restringiria você ao C89 em muitos).Respostas:
Este é realmente um conceito bem conhecido chamado bootstrapping . Basicamente, existe, em algum lugar, uma base de código C mínima para criar uma versão do GCC capaz de criar a base de código atual do GCC. As linguagens auto-hospedadas vêm fazendo coisas assim há décadas.
fonte
gcc
não pode mais ser compilado apenas por um compilador ac. A única garantia que os compiladores do gcc oferecem é que a versão N do gcc pode ser criada com a versão N-1 do gcc.However, without prebuilt binaries and just the newest version, you were stuck, right? If not, are there other implications on this situation raised by the switch from C to C++ of the GCC project?
- pressupõe que você não tem acesso a versões anteriores nem aborda as outras implicações da mudança de C para C ++ para a base de código.A criação de um compilador escrito no mesmo idioma que compila é chamado de inicialização . O artigo da wikipedia descreve várias maneiras pelas quais um compilador pode ser inicializado.
Dada a sua restrição de que você só possui um código-fonte G ++ pós-4.8 e nenhum binário pré-criado para sua plataforma de destino (nenhum compilador C ++ existente), a inicialização do compilador G ++ pode ser feita por meio de compilação cruzada .
Ao inicializar um compilador usando a compilação cruzada, você cria várias versões do seu compilador
Se você também não possui um PC (ou similar) para executar as etapas iniciais, está realmente empatado, mas a chance de estar nessa situação e tentar inicializar um compilador é insignificante.
fonte