Não existe um problema de galinha e ovo desde que o GCC seja escrito no próprio C ++?

10

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?

danijar
fonte
3
Não tenho certeza do que você está perguntando aqui, embora você queira ler sobre compilação cruzada .
5
Plataforma totalmente nova não terá o compilador C ++ nem o compilador C. Compilação cruzada é a resposta.
doc
11
Você provavelmente deve ler a mudança do GCC para C ++ , Mudando para C ++ e, possivelmente, a discussão que o GCC precisará agora de C ++ para construir no reddit. Não tenho certeza de que gccantes 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).
2
Eu não entendo o que há de especial em C ++ nesta questão, o problema existe com C ou qualquer outra linguagem, não é?
RemcoGerlich 12/12

Respostas:

16

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.

Mason Wheeler
fonte
Na verdade não. Esse não é mais o caso (e o problema da pergunta). gccnã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.
9
@ MichaelT: Mas uma versão anterior do GCC pode ser criada com um compilador C, que pode compilar versões posteriores escritas em C ++, que foi o que eu disse.
Mason Wheeler
Eu também apontaria para as perguntas da pergunta: 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.
9

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

  1. No seu PC, você instala um compilador C ++ (pode ser qualquer compilador C ++, não precisa ser G ++)
  2. Usando esse compilador, você cria um compilador cruzado G ++ que pode ser executado no PC e gera código para a plataforma de destino
  3. Usando o compilador cruzado G ++ que você acabou de criar, você cria um compilador G ++ nativo que pode ser executado na plataforma de destino e criar código para ele.
  4. Você terminou. Você criou um compilador C ++ para a nova plataforma.

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.

Bart van Ingen Schenau
fonte