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

O que é LinuxDownload LinuxApostila LinuxEnviar notícia


Compilador livre: Clang torna-se capaz de compilar a si próprio efetivamente

O Clang, compilador em código aberto sendo desenvolvido no bojo do projeto LLVM (iniciado em 2000 na Universidade de Illinois), cada vez mais se aproxima de ser uma excelente opção para projetos que exijam compilação de C, C++ e Objective-C (e, em graus variados, também das demais linguagens para as quais já tem front-end implementado ou em andamento), contando também com a vantagem de ser oferecido sob uma licença verdadeiramente livre.

E a novidade do final da semana passada é que o Clang agora é um compilador self-hosted na prática, ou seja, é capaz de compilar o seu próprio código-fonte (o Clang mais o LLVM, equivalente a mais de 550K linhas de código em C++) integralmente, gerando um executável funcional capaz de novamente compilar o mesmo código-fonte, gerando mais uma vez um compilador funcional capaz do mesmo feito, e assim sucessivamente.

Parabéns aos desenvolvedores pelo atingimento deste importante marco! Aguardo noticiar em breve os próximos. A proposta do LLVM e as metas do Clang, em especial, são muito bem-vindas por mim.

Como a curiosidade a respeito é natural, vale mencionar que o Clang continua sendo um trabalho em andamento, e que ainda não é capaz de compilar o kernel Linux. Mas ele já compila o kernel do FreeBSD (para i386/amd64) há um ano, e o do DragonflyBSD também desde o ano passado. Em meados do ano passado ele já era capaz de compilar 99% do FreeBSD, e já era pública a discussão sobre adotá-lo como o compilador do FreeBSD, que já vinha levando a grande atenção aos ajustes, implementações e correções ainda necessários ao Clang para permitir uma migração completa. (via h-online.com)


• Publicado por Augusto Campos em 2010-02-08

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.

    stanbr (usuário não registrado) em 8/02/2010 às 9:47 am

    Nossa, o sitio br-linux puxando o saco da licença BSD? Legal :-)

    Não entendi o termo “puxar o saco”?

    Engraçado, às vezes comento e o comentário não sai.

    Tentarei de novo…

    O que faz com que um código em C seja compilável por qualquer compilador C que use o padrão ansi é ser escrito usando o padrão ansi, ok? Isto significa que o Linux ao menos não usa este padrão (nunca tentei compilar o linux com um -ansi, mas tentarei), e o FreeBSD, por compilar com gcc e llvm, certamente mais provavelmente está mais perto de tal feito.

    Alguém sabe se existe alguma iniciativa do tipo no desenvolvimento do Linux?

    E, mais uma vez, não houve a real necessidade de colocar no texto “licença verdadeiramente livre”, que só aparece quando se trata de um software licenciado do tipo BSD/MIT. Bem que o autor poderia ter citado somente “com uma licença baseada nas licenças BSD/MIT”.

    oba! agora foi :-)

    Tenchi, não sei se a questão do fonte respeitar o padrão ANSI é a única que impede a compilação. Acredito que há outras possíveis e que possam dificultar a produção de um objeto funcional no estilo (e complexidade) destes kernels – ainda mais para um compilador ainda nesta etapa de desenvolvimento.

    Além disso, sua avaliação de que “não houve a real necessidade de colocar no texto “licença verdadeiramente livre”” parece partir do pressuposto de que todos os leitores que terão acesso a esta informação sabem que a licença adotada pelos desenvolvedores do Clang é verdadeiramente livre.

    As evidências de que disponho apontam para o contrário, com muitos leitores manifestando acreditar erroneamente de que se trata de uma licença menos do que livre, ou uma licença “open source” que não seria “livre”.

    Além disso, o fato de que se trata de uma licença verdadeiramente livre, conforme afirmando, a partir da definição de liberdade adotada aqui no BR-Linux (que é da Free Software Foundation) me parece incontestável, além de digno de menção.

    self_liar (usuário não registrado) em 8/02/2010 às 10:30 am
    Profeta do Caos (usuário não registrado) em 8/02/2010 às 10:34 am

    Este Clang tem algum vinculo com o Mac OS? Eu quero dizer ele é usado no Sistema da Apple? Alguém sabe me responder isto?

    Self_liar, volto a pedir que não reinsira os seus comentários moderados pelos leitores. Refraseá-los não torna isso menos indesejado.

    self_liar (usuário não registrado) em 8/02/2010 às 10:36 am

    Sim a apple usa o llvm para compilar seu software pelo que eu me lembro.

    self_liar (usuário não registrado) em 8/02/2010 às 10:39 am

    Na wikipedia tem uma referencia sobre a apple

    http://en.wikipedia.org/wiki/Low_Level_Virtual_Machine#cite_note-0

    Augusto:

    Tentei omitir os termos os quais acredito que estavam provacando a moderação.

    self_liar, se você tem uma opinião sobre quais são estes termos, omita-os desde a primeira vez, e não em uma segunda tentativa.

    Profeta, a Apple usa o Xcode, cujo compilador é derivado do gcc.

    Imagino que no futuro considerarão o uso do Clang.

    Condector (usuário não registrado) em 8/02/2010 às 10:47 am

    Acredito que seja um marco importante.. é sempre bom ter opções.. e isso vai ajudar também ao GCC a ter um competidor saudável e termos melhorias para todos.

    Lucas Timm (usuário não registrado) em 8/02/2010 às 11:20 am

    Seria bacana se o CLang compilasse o Linux também, afinal os GNUs poderiam parar de encher o saco dizendo que só o GCC compila o Linux, que o Linux sem o GCC não é nada e que por isso devemos chamar o Linux de GNU/Linux – e outras coisas que vocês conhecem. E como já foi dito, competição é SEMPRE saudável.

    Augusto, tudo bem. Não vou discutir com vc, pois sei que é um grande argumentador e eu não teria chance alguma numa discussão.

    Mas um dia ainda tentarei entender suas opiniões recentes sobre liberdade de licenças, etc.. Andou se revoltando muito com coisas da GNU/FSF, tanto que passou a chamar o Stallman de bom doutor e chamar outras licenças frequentemente chamadas de não-livres (ok, a licença que vc passou no link é compatível com a GPL) pela FSF de verdadeiramente livres, dentre outros.

    O que se passa neste seu coraçãozinho magoado? Brincadeira :-)

    Com relação ao llvm, achei-o bem interessante. Fiz uns testes aqui, coisa realmente simples.

    Criei um teste.c com só um “Relô Uordi” e compilei com o gcc, o llvm-gcc e com o mingw (windows). Depois estripei os três binários resultantes.

    O resultado na execução não vale muito, por ser só um hello world, mas o tamanho dos binários foi: gcc: 6,2K, llvm: 4,1K, mingw: 4,5K.

    Pq eu não sei, mas achei engraçado o tamanho do binário nativo gcc ter ficado maior do que os outros.

    Heaven (usuário não registrado) em 8/02/2010 às 11:51 am

    @tenchi

    Errado, o kernel do FreeBSD também não usa ANSI, tanto é que o mesmo ainda é bastante dependente do GCC, o que houve foi uma migração e alteração de código para que o mesmo também pudesse ser usado no LLVM e no Clang, então não adianta usar o padrão ANSI justamente pelo fato que o mesmo padrão não atende bem as necessidades de se construir um kernel, o que significa que se vai fazer um sistema você definitivamente terá de amarrar o kernel aquele compilador, tanto por desempenho quanto por otimizações.

    Pelo que me lembre um colega da faculdade trabalhava para a Nokia onde tinha parte do desenvolvimento do LLVM que também o dedo ou a mão da Apple, ambos vem ajudando no crescimento desta infraestrutura que significará o futuro do desenvolvimento produtivo, eu mesmo estou torcendo para que os compiladores atuais deixem de serem compiladores e se tornem simples front-ends desta infra-estrutura.

    Outra coisa um compilador que já pode compilar seu próprio código já merece respeito.

    Allan Taborda dos Santos (usuário não registrado) em 8/02/2010 às 12:03 pm

    O Linux é chamado de GNU/Linux não por causa do GCC e sim da libc do projeto GNU. O GNU/Linux roda sem o compilador, mas não sem a biblioteca padrão C do projeto GNU.

    É sempre bom existir concorrência no setor de compiladores livres, pois sem concorrência, não há o estímulo para melhorias e inovações.

    Espero que ocorra com os compiladores livres o mesmo que ocorre entre os browsers, que cada vez mais vêm tendo melhorias, ao contrário do que ocorria quando só havia IE 6 (e as outras opções não eram tão populares, então o IE reinou absoluto e estagnado, já que praticamente não havia concorrência).

    @Heaven, hum… Entendi. Há um tempo foi noticiado aqui mesmo alguma coisa com relação à compilação do Linux pelo llvm. Alguém soube de novidades sobre a iniciativa? Procurei mas não achei muita coisa aqui.

    Será que isto resultaria num kernel mais rápido?

    >> o saco dizendo que só o GCC compila o Linux, que o Linux
    >> sem o GCC não é nada e que por isso devemos chamar o Linux
    >> de GNU/Linux – e outras coisas que vocês conhecem.
    >> E como já foi dito, competição é SEMPRE saudável.

    Concordo nas 2 afirmações. Só fico com medo é dos próximos argumentos da galera “GNU”

    “Ainda é GNU/Linux pq o core-utils, net-utils, bla, bla, bla, são da GNU” :P

    Tenchi, creio que você está misturando situações diferentes, e temperando com um pouco de exagero. Que eu me lembre, esta de hoje foi a segunda vez que eu mencionei que a licença de um projeto é “verdadeiramente livre”.

    E em ambos os casos (o de hoje e o anterior) a licença era mesmo verdadeiramente livre – não era uma licença-Denorex tipo a “GPL-PA – GPL for Computer Programs of the Public Administration“, proposta pela brasileira Celepar e não-livre, apesar do nome.

    Em ambos os casos também, como você mesmo notou, tratava-se de licenças sobre as quais o equívoco de considerá-las menos do que livres é frequente.

    De fato eu deixei de ser membro da FSF no mês passado (você ainda é?), mas isso não muda minha opinião sobre a GPL, que é uma ótima opção de licença livre para quem deseja copyleft. O fato de eu apontar que outras licenças são verdadeiramente livres não deve ser entendido como uma negação da minha opinião sobre a liberdade oferecida pela GPL, e nem deveria precisar vir acompanhado de um disclaimer sobre isso.

    Wilson (usuário não registrado) em 8/02/2010 às 1:10 pm

    Vou fazer uma pergunta de leigo…
    Porque é tão difícil um compilador se auto-compilar? Qual o problema / dificuldade nisso?
    Valeu.

    Lucas Timm (usuário não registrado) em 8/02/2010 às 1:28 pm

    @Ironmaníaco

    Ó, o Allan já disse o motivo. hehe.

    Daniel (usuário não registrado) em 8/02/2010 às 1:43 pm

    Gostaria de saber onde pego esse clang de froma gratuita e com segurança, pois já tentei pegar duas vezes no torrent e não consegui, vieram coisas que prefiro nem citar aqui.

    Não acho que a licença seja “verdadeiramente livre”, afinal “obriga” a que sejam seguidas 3 condições. Que verdadeira liberdade é essa que impõe condições?!

    —– x —–

    Quanto ao nome GNU/Linux, pelo que sei, deveria ser apenas GNU. Não o é pois o kernel oficial do projeto não está pronto. Como o SO todo ficou famoso como distribuições Linux, têm prevalecido o nome Linux, quando na verdade seria apenas GNU. Ou seja, para mim chamar GNU/Linux é uma concessão e uma maneira de diferenciar do que seria um SO apenas GNU (antes que alguém reclame vejam que o SOs citados a seguir não usam o nome Linux).

    Notem que o Google ChromeOS e o Android usam o Linux como kernel, mas não são GNU (acho que o Palm WebOS tb está nessa categoria). Agora mais que nunca, é necessária uma diferenciação por parte do pessoal que usa Linux = GNU/Linux.

    Emanuel, sem dúvida é possível ter conceitos variados sobre o que constitui liberdade de software. Não vejo nenhum problema em você adotar um ponto de vista diferente, sob o qual me parece que os únicos softwares verdadeiramente livres seriam os que estiverem, de fato (e não apenas por declaração de seus autores) em domínio público.

    Mas se quiser saber detalhes sobre a conceituação de liberdade de software (e suas licenças) adotada aqui no BR-Linux, sugiro ler o item 6 do posicionamento do site.

    @Daniel, o Clang é um software verdadeiramente livre e gratuito então não é necessário ficar procurando pelos torrents da vida ai, basta ir no site do desenvolvedor clang.llvm.org. Mas o compilador ainda está em desenvolvimento, então se faz necessário baixar direto do controlador de versão deles. Nesta páginas se encontram as informações para baixar compilar e usar o clang: http://clang.llvm.org/get_started.html

    Allan Taborda dos Santos (usuário não registrado) em 8/02/2010 às 3:16 pm

    O kernel Linux não faz parte do projeto GNU, por isso, o sistema operacional não deve ser chamado apenas de GNU e sim de GNU/Linux. Caso troque o kernel por um desenvolvido pelo projeto GNU (no momento, só existe o Hurd), aí sim.

    self_liar (usuário não registrado) em 8/02/2010 às 3:40 pm

    É legal ter dois projetos diferentes .Muitas pessoas gostam de ver vários projetos com os mesmos propósitos .No entanto não posso concordar que a competição seja saudável e que ela seja a responsável por produzir projetos diferentes.

    É possível juntar ideias diferentes (como clang e o gcc) em um mesmo projeto . Mas parece que isso não aconteceu, no entanto , não significa que os dois projetos estão competindo ou que um está querendo tomar o lugar do outro. Acredito que só houve uma divergencia no plano de ideais e assim foi necessário criar um novo projeto .

    Mas ninguém está competindo.Isto não é fruto de competição .Isso somente é fruto de diferenças de ideias .Ninguém está querendo competir um com o outro ou um matar ao outro.

    Na minha conclusão digo que é possivel produzir softwares diferentes sem competição.Sem um matar ao outro.

    só lamento (usuário não registrado) em 8/02/2010 às 3:42 pm

    @Allan
    “Caso troque o kernel por um desenvolvido pelo projeto GNU (no momento, só existe o Hurd), aí sim.”
    Qual foi o presente que o papai Noel te trouxe ano passado? :P
    GNU/Linux foreveris!

    @Heaven
    “o que houve foi uma migração e alteração de código para que o mesmo também pudesse ser usado no LLVM e no Clang,…”
    Ou então dar suporte para as extensões do GCC no seu compilador.(http://pcc.ludd.ltu.se/fisheye/browse/pcc/pcc/cc/ccom/gcc_compat.c?r=1.44)

    Antônio Pessoa (usuário não registrado) em 8/02/2010 às 3:42 pm

    Depende, mas neste caso entramos na épica discurssão de “o que é o sistema operacional: o kernel ou este mais a userland que o rodeia?”.

    Não vale a pena, cada um tem sua opinião e suas próprias razões.

    Na minha, Linux é Linux, GNU é GNU. A sua é diferente? Que bom, o mundo ainda tem salvação.

    Antônio Pessoa (usuário não registrado) em 8/02/2010 às 3:53 pm

    @self_liar, competição não quer dizer, necessariamente, matar um ao outro, existem competições saudáveis.

    Alternativas sempre são bem vindas, principalmente se trazem novas ideias e melhorias. Nem sempre é viável tentar juntar tudo em uma só solução, as vezes precisamos separar e seguir caminhos diferentes, mesmo que com o mesmo objetivo.

    Iuri Gules (usuário não registrado) em 8/02/2010 às 3:57 pm

    O EmanuelSam me fez pensar em uma coisinha. Os outros sistemas operacionais que usam o Linux como kernel e não têm Linux no nome não são atacados e o nome GNU/Linux que compartilha o nome com o Linux é atacado… Eu acho que o problema não está no nome e sim em quem está por trás do nome.

    self_liar (usuário não registrado) em 8/02/2010 às 3:57 pm

    Se não é competição ,então o termo adequado deveria ser outro,pois competição é isso : briga ,desafio e luta.

    E quando se usa esse termo ,as pessoas ficam com a impressão de que é necessário competir e lutar para produzir projetos e ideias diferentes.

    Antônio Pessoa (usuário não registrado) em 8/02/2010 às 6:25 pm

    @self_liar, competição, luta e desafio não são coisas ruins, pelo contrário, se for feito de forma SAUDÁVEL pode ser uma grande alavanca para o desenvolvimento de todos envolvidos, vide o Mozilla Firefox e o Internet Explorer (sei, sei, a Microsoft não compete saudavelmente. Não se atenha a detalhes, aprecie o exemplo).

    Não estou dizendo que É PRECISO competir para ter boas ideias e projetos, mas apenas que alternativas sempre são bem vindas, principalmente se trazem boas ideias para uma competição saudável. O Chrome está trazendo ideias interessantes para a área de navegadores e é mais uma alternativa para escolhermos.

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