Visite também: Currículo ·  Efetividade BR-Mac

O que é LinuxDownload LinuxApostila LinuxEnviar notícia


GCC portando seu próprio código para C++

A árvore de desenvolvimento do GCC recentemente recebeu uma série de inclusões de código que ativam uma reimplementação em C++ do código do estágio 1 do compilador, originalmente desenvolvido em C. O Código dos estágios 2 e 3 do compilador já estava disponível em C++ há algum tempo.

A proposta de migrar para o C++ existe há mais tempo, mas começou a ser colocada em prática a partir de 2010. A ideia é manter o código do compilador compreensível e manutenível.

Não é o único compilador open source usado por grandes projetos a adotar o C++: o LLVM (integrante do Clang, em adoção pelo FreeBSD e OS X), por exemplo, é feito nesta linguagem. (via h-online.com – “GCC shifts internal focus to C++ – The H Open: News and Features”)


• Publicado por Augusto Campos em 2012-08-17

Comentários dos leitores

Os comentários são responsabilidade de seus autores, e não são analisados ou aprovados pelo BR-Linux. Leia os Termos de uso do BR-Linux.

    Antonio (usuário não registrado) em 17/08/2012 às 10:46 am

    Eu gosto da idéia, apesar de gostar de C, considero C++ melhor para projetos grandes (sim eu sei, o Kernel é escrito em C e é grande…). Quero ver o que o Linus irá dizer sobre isso…

    Marcos (usuário não registrado) em 17/08/2012 às 10:53 am

    Linus detesta c++.

    Carlos (usuário não registrado) em 17/08/2012 às 1:04 pm

    E o que importa a opinião do Linus??

    Como uma vez eu li em uma comentário do slashdot: “Linus é um cara a ser ouvido, mas não é porque ele diz que vc está errado que de fato vc está.”

    Ele faz bem o seu trabalho no kernel, mas acreditar que ele sabe tudo sobre tudo e o bem para todos os projetos é idiotice.

    Se for ver bem o texto que ele critica C++ verá que não há nenhum embasamento técnico. Apenas choramingos de uma linguagem que ele não compreende. Por exemplo: “C++ leads to really really bad design choices”. Isso se chama: “sou limitado para enxergar bons designs e culpo a linguagem por isso”. Só.

    Alexandre Arruda Paes (usuário não registrado) em 17/08/2012 às 2:12 pm

    Reversal russa ??? :D

    Leandro Santiago (tenchi) (usuário não registrado) em 17/08/2012 às 2:23 pm

    @Carlos, sou pogramador e adoto C e C++ (sim, eu falo C/C++, pq uso as duas, embora saiba das diferenças) como linguagem do dia-a-dia e do trabalho.

    Não discordo totalmente do Linus. C++ permite coisas que em C são mais complexas ou exigem mais “artifícios técnicos”, mas em geral C++ (independentemente da implementação) é mais problemático. Um exemplo prático são os problemas causados pelo linker e quebras de compatibilidade (bem como ausência de retrocompatibilidade) do C++ por causa da maneira como os símbolos são transformados em binário.

    Cada compilador tem um sistema de “mangling” diferente e isso pode mesmo variar em diferentes versões de um mesmo compilador. C é muito mais simples nisso, por haver um mapeamento direto de cada função para cada função do código objeto. Mas, em troca, vc perde sobrecarga de método, dentre outros.

    Se vc modela um sistema orientado a objetos, fica difícil fazer em C. Dá pra “simular” com certo grau de perfeição a maior parte dos recursos de OO no C, mas dá um trabalho extra e é bastante suscetível a erros do programador.

    Além do mais, depurar C++ (com o gdb) é muito mais complicado que em C. Isso é uma coisa que ainda me incomoda. O sistema de classes e funções genéricas do C++ é ótimo, mas praticamente impossível de depurar. Tente exibir um objeto std::string no gdb pra ver do que estou falando :-)

    Ou seja, C é muito mais simples que C++, no bom e no mau sentido. Ao mesmo tempo que não adiciona tanto overhead como outras linguagens mais modernas (principalmente as interpretadas), possui bons recursos para quem quer ter menos trabalho pra programar.

    E, em tempos de sistemas distribuídos, onde a velocidade da linguagem não é o ponto mais importante, mas sim o algoritmo usado (troca de mensagens entre nós implica em uso da rede, o que é lento), o desempenho da linguagem em si não é o fator primordial. Mas ainda são importantes, pois um bom algoritmo em duas linguagens diferentes tenderá a ser mais rápido na linguagem/implementação mais rápida.

    Nos últimos meses tenho mexido bastante com o LLVM (mais no backend) e a arquitetura dele é muito melhor que a do GCC, em boa parte pelos recursos que o C++ oferece, tais como templates e herança. E um compilador complexo necessita de tais recursos. Por exemplo, cada gerador de código alvo pode ser uma especialização de uma classe mais geral. O LLVM tem muito disso, e a classe “de entrada” de um backend é a especialização de uma classe do projeto. Simplifica muito a vida do desenvolvedor.

    Possuo também um clone do repositório do GCC e, nas vezes que invento de navegar nele, simplesmente não me acho. É difícil achar tudo, é pouco direto o trabalho de achar onde está determinado componente. Problemas de arquitetura.

    O gcc é meu compilador favorito e espero que continue evoluindo nos próximos anos. Várias melhorias têm sido feita nele justamente pela concorrência com o LLVM.

    Concorrência sempre é bom. Bobagem isso de “vamos unir os esforços em torno de uma só causa”.

    Nossa, que dorgas tô hj.

    @Leandro Santiago,

    Seus comentários foram muito sensatos e direto ao ponto.

    Seria legal se você colocasse no seu blog as coisas que você está aprendendo sobre LLVM, seria muito útil. []‘s, Alan

    Rombo (usuário não registrado) em 17/08/2012 às 5:31 pm

    daqui a 20 anos portam para haskell…

Este post é antigo (2012-08-17) e foi arquivado. O envio de novos comentários a este post já expirou.