De acordo com man gcc
, o gcc suporta os seguintes idiomas, que você pode escolher com o -x
sinalizador:
c c-header cpp-output
c++ c++-header c++-cpp-output
objective-c objective-c-header objective-c-cpp-output
objective-c++ objective-c++-header objective-c++-cpp-output
assembler assembler-with-cpp
ada
f77 f77-cpp-input f95 f95-cpp-input
go
java
Qual é o critério para colocar um idioma no gcc? Obviamente, linguagens como C e C++ estarão no gcc, mas fiquei surpreso com o go e o java.
Além disso, a documentação do gcc em gnu.org diz : "O componente independente de linguagem do GCC inclui a maioria dos otimizadores, bem como os "back-ends" que geram código de máquina para vários processadores." Meu conhecimento sobre compiladores é básico na melhor das hipóteses, mas isso significa que o gcc analisa e processa cada linguagem em algum tipo de formato universal e, em seguida, produz algum tipo de binário a partir daí? Se este for o caso, escrever um otimizador gcc independente de linguagem funcionaria para qualquer uma dessas linguagens, por exemplo, C e go?
Basicamente, deve haver um frontend de linguagem e quaisquer bibliotecas de suporte necessárias, licenciadas adequadamente, de qualidade suficiente (código, mas também documentação e testes), com pessoas dispostas a mantê-lo. Os decisores são o comitê de direção do GCC .
Há exemplos de idiomas sendo adicionados e removidos em um passado não muito distante. D se tornou candidato em 2011 , foi aprovado em 2017 e está disponível no GCC 8. Java, por outro lado, foi removido do GCC 7 depois de definhar por muito tempo.
Existem projetos para adicionar Python e Rust , mas não acho que haja muita atividade lá.
O GCC é dividido em vários componentes ; as várias linguagens que ele suporta são implementadas por frontends, que transformam os programas em uma representação intermediária, GIMPLE (que é independente de linguagem e máquina). Os otimizadores são, portanto, compartilhados entre os idiomas.