Aller au menu - Aller au contenu

Clang fait ses preuves en s'autocompilant

Revenir à la liste des news
Participer à la discussion

Image

Informations

Contributeur(s) : gnomnain
Publié : le 13/02/2010 à 20:37:40
Catégorie : Programmation
Visualisations : 23 005

Licence : Creative Commons BY SA

Clang fait ses preuves en s'autocompilant


Le 4 février, les développeurs de Clang, un compilateur pour les langages de la famille du C, ont annoncé qu'il était maintenant capable de se compiler lui-même. Clang, écrit en C++, supportait déjà les langages C et Objective-C. Cependant, il ne gère pour l'instant qu'un sous-ensemble réduit du C++, et n'est pas capable de compiler en entier des projets utilisant toutes les fonctionnalités du langage C++, comme Boost. Le projet vient donc de réaliser une avancée significative, mais ne peut pas encore tout à fait rivaliser avec des compilateurs comme GCC.

Clang, un compilateur C, C++ et Objective-C


Clang est une partie d'un compilateur C, C++ et Objective-C : il transforme le code en un autre langage, plus simple, qui est ensuite compilé en code machine par un deuxième compilateur appelé LLVM.

Le projet a été lancé par Apple, pour remplacer gcc, le compilateur du projet GNU. En effet, dans Mac OS, gcc a d'abord été utilisé comme un compilateur à part entière, puis comme front end, traduisant le code C dans un langage compréhensible par LLVM. Cependant, il est difficile d'intégrer gcc avec d'autres programmes, parce que son architecture ne s'y prête pas, mais aussi parce qu'il est publié sous licence GPL, ce qui signifie que les programmes qui y font appel doivent être publiés sous une licence compatible. De plus, alors que Apple utilise beaucoup l'Objective-C, le support de ce langage n'est pas considéré comme prioritaire par les développeurs de gcc. Apple a donc décidé de lancer le projet clang, dont le code a été publié sous licence BSD en juillet 2007. Depuis la version Snow Leopard, clang fait partie des compilateurs distribués avec Mac OS.

Qu'est-ce que clang apporte ?


Dès le départ, clang a été conçu comme un ensemble modulable de bibliothèques liées dynamiquement et pouvant être utilisées de manière indépendante. Cela permet d'utiliser les fonctionnalités de clang à la carte, sans avoir à le recompiler pour chaque usage, et ouvre la voie à de nombreuses applications.

Par exemple, en plus de pouvoir compiler du C, il est aussi utilisable pour gérer la coloration syntaxique, faire une liste des fontions utilisées par l'IDE, ou bien pour des outils de refactorisation automatique. Pour faciliter ce type d'utilisation, le maximum d'informations sur la structure du code original est gardé pendant la compilation.

Une attention particulière a été apportée aux messages d'erreurs, afin qu'ils soient le plus clairs possible. Quand le compilateur est utilisé en ligne de commande, clang affiche avec les messages d'erreurs la ligne de code concernée, et montre où exactement se trouve l'erreur. Si le code provoquant une erreur a été généré par une macro, clang affiche à la fois le code avant l'application de la macro et le code de la macro. Les erreurs sont aussi mieux ciblées : le plus souvent, clang montre la cause du problème plutôt que sa conséquence. Ainsi, en cas de point-virgule oublié, clang indique que l'erreur se trouve à la ligne où le point-virgule manque plutôt qu'à la ligne suivante.

Ces fonctionnalités permettent une meilleure intégration avec l'IDE : la conception modulaire de clang permet par exemple de récupérer les erreurs sous une forme facile à traiter pour l'afficher directement dans l'IDE (c'est le cas dans l'IDE Xcode d'Apple).
Enfin, des tests ont montré que clang est un compilateur plus rapide que gcc, tout en utilisant moins de mémoire. Il est de plus capable d'exploiter les processeurs multiples pour accélérer la compilation.

Image utilisateur
Les développeurs de clang développent aussi un analyseur statique. Le but de ce programme est d'analyser un code source et d'essayer de déceler des bugs potentiels (fuites mémoires, utilisation de variables non initialisées, pointeurs invalides, ...) sans exécuter le programme. Bien que ce genre de programme ne puisse pas trouver tous les bugs, et que l'analyseur statique de clang soit toujours en développement, il est capable de trouver un certain nombre de bugs dans les programmes, parfois difficiles à détecter manuellement. Ils peuvent ensuite être affichés directement dans l'IDE, ou sous forme de rapport généré en HTML.

LLVM, l'autre partie du compilateur


Image utilisateur
Le logo de LLVM

Mais Clang n'est qu'une partie d'un compilateur complet. Il génère de l'assembleur LLVM, un langage de bas niveau indépendant du processeur utilisé. C'est ensuite LLVM qui se charge de le transformer en code machine optimisé. En plus de permettre de compiler des programmes statiquement, LLVM est conçu pour permettre la compilation à la volée, ce qui permet par exemple d'optimiser les programmes pendant leur exécution.

LLVM est utilisable de façon indépendante du langage : on peut donc l'utiliser pour compiler de nombreux langages différents, en appliquant à tous les mêmes optimisations. Il permet notamment de compiler des programmes à partir de la représentation intermédiaire utilisée par gcc, et peut donc être utilisé avec tous les langages supportés par gcc (même si quelques modifications sont nécessaires pour permettre cela).

Des applications concrètes


Image utilisateur

Clang et LLVM sont de plus en plus utilisés par Apple. Par exemple, depuis Mac OS 10.5, Apple utilise LLVM pour optimiser les shaders OpenGL : dans ces programmes qui peuvent être exécutés plusieurs millions de fois, les opérations qui ne sont pas supportées par la carte graphique doivent être réalisées sur le processeur. Avant d'utiliser LLVM, Apple utilisait une sorte de compilateur qui mettait bout à bout des morceaux de code prédéfinis. Cependant, cette approche demande de coder une version en assembleur de chaque fonction pour chaque processeur, et très peu d'optimisations étaient possibles. Utiliser LLVM a permis d'écrire le code des opérations en C et d'appliquer beaucoup plus facilement des optimisations sans avoir à écrire de code dédié.

Dans un domaine proche, clang et LLVM sont utilisés par NVidia et Apple pour leur implémentation d'OpenCL, une API permettant de réaliser des calculs lourds de façon parallèle, par exemple en utilisant une carte graphique mais aussi en profitant des processeurs à plusieurs coeurs.

Le projet Unladen Swallow, qui vise à coder un interpréteur plus performant pour le langage dynamique Python, utilise aussi LLVM : les fonctions les plus utilisées sont compilées à la volée en code machine pour leur permettre de s'exécuter plus rapidement. Cette technique est aussi utilisée par LanguageKit, un composant de l'environnement de bureau libre Étoilé qui permet d'implémenter facilement des interpréteurs pour des langages dynamiques.


Liens


66 Participations

Pour accéder à cette section
Connectez-vous !
connexion_rpx
Page 1  2  3  Suivante
Pseudo Discussion
1 visiteur sur cette news (0 membre et 1 Anonyme)
Page 1  2  3  Suivante
Hors ligne Lukas # Posté le 13/02/2010 à 20:42:12
Groupe : Anciens

Ville : Mont-dol
Pays : France métropolitaine

Cette news est peut-être intéressante, c'est pourquoi il est judicieux de la lire avant de la commenter. De plus, seuls les commentaires constructifs sont acceptés, et non les appréciations de la qualité de la news.
Hors ligne Edmeral # Posté le 13/02/2010 à 20:44:12
Ulquiorra ♥ Ubuntu !
Avatar

Ville : Meknès
Pays : Maroc

Mais ça n'apporte pas grand chose aux développeurs à part pour apple qui ne veut pas utiliser gcc.



 
Hors ligne gnomnain # Posté le 13/02/2010 à 20:48:00
Blblbl !
Avatar
Groupe : Anciens

Au contraire, c'est intéressant parce que ça apporte une alternative à gcc, donc de la concurrence (et dans le libre aussi, la concurrence c'est bon). Comme tu as lu dans la news, clang offre des fonctionnalités intéressantes qui n'existent pas avec gcc. De plus, il parait que le code de gcc est assez difficile d'accès, alors peut-être que llvm et clang attireront plus facilement les contributeurs.

Image utilisateur
Haskell - Learn You a Haskell - Real World Haskell - xmonad - OCaml
Apprenez Haskell ! - #ircduzero
<colbseton> Serialk: tu cherches vraiment des liens logiques dans tout ce que je raconte ?
 
Hors ligne Tchouk! # Posté le 13/02/2010 à 20:48:20
Avatar
Groupe : Bannis
Flux RSS

Edmeral> Toute l'architecture LLVM est prometteuse, et pourrait servir à des tas de projets (comme le montrent Unladen Swallow et LanguageKit). On en trouve une liste sur son site officiel.

Comme c'est dit dans la news (l'as-tu seulement lue ?), Clang quant à lui offre différents avantages sur GCC qui peuvent être suffisants pour que des développeurs choisissent de l'utiliser.

NeXTSTEP, l'ancêtre de Mac OS X — en 1993.
Image utilisateur
Si vous avez des couilles et que vous aimez
la programmation sans chichis, venez sur PM !
 
Hors ligne psimod # Posté le 13/02/2010 à 20:55:17
Avatar
Flux RSS

on ne peut pas creer d'application commercialisee s'ils sont compiles avec gcc?
 
Hors ligne Marin M. # Posté le 13/02/2010 à 20:57:36
Groupe : Bannis

Citation : psimod
on ne peut pas creer d'application commercialisee s'ils sont compiles avec gcc?

Mer il et fou §§§

Bien sûr que si ;) .
Hors ligne anonyme # Posté le 13/02/2010 à 21:07:29

Très bien , la concurrence est toujours-utile , il faut que ça continue et que dans tout les domaines ça bouge , c'est une des qualités de l'informatiques . Sinon le coup du compilateur qui se compile ça me fait penser a une machine qui en créer d'autres , attention elle prennent le controle !!! :lol:
Hors ligne YoruNoHikage # Posté le 13/02/2010 à 21:09:54
Patate volante en force !
Avatar

C'est en concurrençant que l'on avance =)
Cela peut remettre à jour GCC s'ils veulent qu'il reste très utilisé
 
Hors ligne Serialtueur # Posté le 13/02/2010 à 21:12:22
\_o< ~ Koin ?
Avatar
Groupe : Bannis

Ville : Marseille
Pays : France métropolitaine

Lineplus -> ^^
Sinon, je pense que c'est une bonne idée de rivaliser avec certains outils ayant pour l'instant le monopole, mais dans ce cas là c'est franchement pas assez connu pour arriver a se tailler une place, encore quelques efforts, on y est presque :)

Des statistiques pour votre site ! | Le protocole HTTP avec QtNetwork
Le nolife, c'est le pendant obscur du geek, la tare de réputation dont il n'arrive pas à se débarrasser. -- ordiclic
IRC : #kamoulbox@irc.freenode.net
 
Hors ligne Karl Yeurl # Posté le 13/02/2010 à 21:16:54
Orange et gris.
Avatar
Flux RSS

Ville : Flémalle
Pays : Belgique
Études : FSA ULG

Hmm… :-)
Intéressant.

Le titre racoleur de cette news aurait mérité d'être plus explicité. En quoi l'auto-compilation est un exploit, etc…

Sinon, ce fut instructif et bien rédigé, merci =).


« Défendre le c cédille majuscule n’est-il pas vain ? Ca m’isole, comme disent les fous. »
Stéphane ARLEN
 
Hors ligne nuKs_ # Posté le 13/02/2010 à 21:21:05

Ville : Spa
Pays : Belgique
Études : EPL UCL

Citation : psimod
on ne peut pas creer d'application commercialisee s'ils sont compiles avec gcc?

Dans le cas d'apple avec son IDE xcode, c'est plutôt le fait d'intégrer gcc à l'IDE qui semble poser des problèmes de licences.
Quoi qu'il en soit, à ce que je sache xcode n'est pas open source donc utiliser gcc en frontend ne doit pas poser trop de problème à ce niveau là.

Mais c'est vrai que c'est un vrai casse tête pour configurer gcc par l'intermédiaire d'xcode..
Hors ligne gnomnain # Posté le 13/02/2010 à 21:29:32
Blblbl !
Avatar
Groupe : Anciens

Citation : nuKs_
Dans le cas d'apple avec son IDE xcode, c'est plutôt le fait d'intégrer gcc à l'IDE qui semble poser des problèmes de licences.
Quoi qu'il en soit, à ce que je sache xcode n'est pas open source donc utiliser gcc en frontend ne doit pas poser trop de problème à ce niveau là.

Mais c'est vrai que c'est un vrai casse tête pour configurer gcc par l'intermédiaire d'xcode..


En effet, il n'y a pas vraiment de problèmes avec la GPL lorsque que tu ne fais qu'appeler le programme, et récupérer son résultat. Cependant, on peut utiliser clang comme une bibliothèque dans des programmes propréitaires, alors que ce n'est pas possible avec gcc.

Image utilisateur
Haskell - Learn You a Haskell - Real World Haskell - xmonad - OCaml
Apprenez Haskell ! - #ircduzero
<colbseton> Serialk: tu cherches vraiment des liens logiques dans tout ce que je raconte ?
 
Hors ligne Sheeft # Posté le 13/02/2010 à 21:29:33

Avatar

Ville : Rousson
Pays : France métropolitaine

J'avais jamais entendu parler de ce compilateur mais c'est vrai qu'on vois GCC le plus souvent ^^

Après, c'est pas dit que ça fasse trop réagir GCC de ce côté là, parce qu'il risque pas de perdre sa place du jour au lendemain. Si l'on regarde notre cher Internet Explorer, il tient toujours le coup (moins aujourd'hui c'est vrai) alors qu'il a mis bien longtemps avant de réagir face à la concurrence…

Mais les habitudes sont difficiles à perdre, et puis bien souvent on se dit, ça marche avec ça, alors pourquoi changer ?

Image utilisateur
 
Hors ligne robin850 # Posté le 13/02/2010 à 21:29:48
Avatar

Ville : Avesnes-sur-helpe
Pays : France métropolitaine

J'aime beaucoup la news.

Elle est bien expliquer, elle m'a permis d'apprendre plus de chose dans le domaine de la programmation :) .

Merci et bonne continuation.

Pardonnez mes fautes d'orthographe.
Image utilisateur


Utilisation de Twig, un moteur de Templates
 
Hors ligne Karl Yeurl # Posté le 13/02/2010 à 21:31:30 Commentaire supprimé pour le motif suivant : Masqué à la demande de l'auteur..
Hors ligne Dark Patate # Posté le 13/02/2010 à 21:32:27
Longue vie à Dark patate!
Avatar

Ville : Rouffach
Pays : France métropolitaine
Études : Lycée Albert Schweitzer - Mulhouse

Intéressent, mais j'arrive pas à comprendre comme il peut s'autocompiler... C'est l'histoire de l'œuf et de la poule résolue...

VIVE LA REPUBLIQUE ET VIVE LA FRANCE, allons enfants de la patriiiiie le jour de gloire est arrivé...

Image utilisateur
Piquée à Vodka Orange (Merci pour cette superbe usebar)
Mon pied droit est jaloux de mon pied gauche. Quand l’un avance, l’autre veut le dépasser. Et moi, comme un imbécile, je marche ! Raymond DEVOS
 
Hors ligne gnomnain # Posté le 13/02/2010 à 21:34:53
Blblbl !
Avatar
Groupe : Anciens

Citation : Dark Patate
Intéressent, mais j'arrive pas à comprendre comme il peut s'autocompiler... C'est l'histoire de l'œuf et de la poule résolue...


Le principe pour réaliser un compilateur dans le langage qu'il compile, c'est d'utiliser d'abord un autre compilateur (ici gcc) pour compiler le compilateur. Une fois qu'on a un compilateur capable de se compiler lui-même, on n'a plus besoin du compilateur externe pour le développement.

Image utilisateur
Haskell - Learn You a Haskell - Real World Haskell - xmonad - OCaml
Apprenez Haskell ! - #ircduzero
<colbseton> Serialk: tu cherches vraiment des liens logiques dans tout ce que je raconte ?
 
Hors ligne Dark Patate # Posté le 13/02/2010 à 21:37:29
Longue vie à Dark patate!
Avatar

Ville : Rouffach
Pays : France métropolitaine
Études : Lycée Albert Schweitzer - Mulhouse

Citation : gnomnain
Citation : Dark Patate
Intéressent, mais j'arrive pas à comprendre comme il peut s'autocompiler... C'est l'histoire de l'œuf et de la poule résolue...


Le principe pour réaliser un compilateur dans le langage qu'il compile, c'est d'utiliser d'abord un autre compilateur (ici gcc) pour compiler le compilateur. Une fois qu'on a un compilateur capable de se compiler lui-même, on n'a plus besoin du compilateur externe pour le développement.


Donc au début on a quand même utilisé un autre compilateur.

VIVE LA REPUBLIQUE ET VIVE LA FRANCE, allons enfants de la patriiiiie le jour de gloire est arrivé...

Image utilisateur
Piquée à Vodka Orange (Merci pour cette superbe usebar)
Mon pied droit est jaloux de mon pied gauche. Quand l’un avance, l’autre veut le dépasser. Et moi, comme un imbécile, je marche ! Raymond DEVOS
 
Hors ligne Louiss # Posté le 13/02/2010 à 21:37:35
Je suis dieu !

Études : Campus Saffranberg

Très intéressant ce petit compilateur. Il y a tant de choses à apporter à la "compilation traditionnelle", comme il y en a eu (et il y en aura) pour l'édition de texte.

Repris dans Visual Studio 2012 :p ?

... en fait je suis pas dieu ;)

Image utilisateur

 
Hors ligne Mircko # Posté le 13/02/2010 à 21:40:20
Avatar

Pour l'autocompilation, il a d'abord du être compiler avec gcc puis une fois le programme en langage machine, il a lui même recompilé son code source.

Petite question, le code LLVM ressemble un peu au .NET, non? mais version Apple.

Projet d'études: Apprendre le code morse et passer à la pratique!
Tetris en console (meilleur score: 3283), piano beep console, robot-like SDL, Sokoban console
Retrouvez nos bons vieux jeux dans Les Indémodables! -NEW-Le site!-NEW- Ne cliquez pas ici!
Si vous êtes intéressé à faire des programmes développés en console, MP moi!Image utilisateur
 
Hors ligne netboy # Posté le 13/02/2010 à 21:46:03
Avatar

Ville : Monastir
Pays : Tunisie

C'est de l'innovation quand même!! ;) L'évolution des outils de programmation est d'une importance majeure, puisque c'est l'origine de tout programme o_O je pense qu'on va voire de la vrai révolution dans ce domaine !! :-°
Des tools + du talent de la part du programmeur = une combinaison qui devrait nécessairement donner des résultats fascinants :soleil:

Image utilisateur

Image utilisateur
 
Hors ligne nuKs_ # Posté le 13/02/2010 à 21:48:20

Ville : Spa
Pays : Belgique
Études : EPL UCL

Citation : Mircko
Pour l'autocompilation, il a d'abord du être compiler avec gcc puis une fois le programme en langage machine, il a lui même recompilé son code source.

Petite question, le code LLVM ressemble un peu au .NET, non? mais version Apple.


Ca m'étonnerais. Ce qui est surtout utilisé par apple en comparaison à .NET c'est l'objective-c avec le framework cocoa. Dans la news, il parle d'un pseudo assembleur me semble-t-il. Quoique lorsqu'on va sur le site officiel voir les exemples ça te donne plus ou moins raison (http://llvm.org/docs/tutorial/LangImpl1.html).

gnomnain> Merci de l'info. J'ai toujours du mal à m'y retrouver à ce niveau là.
Hors ligne Nicolas M. # Posté le 13/02/2010 à 21:51:14
M(NiCoLaSm) = 406,9 g/mol
Avatar

Ville : Notre-dame de bondeville
Pays : France métropolitaine

Je ne comprends pas vraiment l'intérêt de traduire le C/C++/Objective-C en un autre langage bas niveau avant de le compiler... Ça rejoint un peu le fonctionnement de la compilation dans le cas d'un projet Qt... Ceci dit, un seul compilateur pour trois langages, c'est assez impressionnant, il ne resterait plus grand-chose à faire pour que tous les langages soient lisibles tel quels... ^^ Tiens, je devrais creuser un peu cette idée avant qu'on ne me la pique :p

Image utilisateur Image utilisateur

Le saviez-vous ? Les forums sont environ 283 174 fois plus efficaces que ma boîte MP pour vous aider. ;)
Image utilisateur
 
Hors ligne brain1995 # Posté le 13/02/2010 à 21:56:07
Avatar

Très intéréssante cette news !

Mais si c'est développé par Apple on ne pourras l'utiliser que avec un mac , non ?

Image utilisateur
 
Hors ligne R@hl43 # Posté le 13/02/2010 à 21:58:41
Mérite la victoire
Avatar

J'ai du mal à saisir l'intérêt du langage intermédiaire et l'autocompilation...
Sinon, intéressant pour la précision des messages d'erreurs.

    Éditeur de partitions :
- MuseScore
(gratuit et libre)
                Jeux :
            - La Bataille pour Wesnoth
(gratuit et libre)
            - SuperTuxKart (STK)
(gratuit et libre)

       Autour de Git :
   - Git Cheatsheet
   - git-svn pour utiliser git sur un dépot svn
 
Hors ligne nuKs_ # Posté le 13/02/2010 à 21:59:21

Ville : Spa
Pays : Belgique
Études : EPL UCL

Citation : brain1995
Très intéréssante cette news !

Mais si c'est développé par Apple on ne pourras l'utiliser que avec un mac , non ?


Non je ne pense pas. Il est sous licence BSD donc open-source et le coeur de mac os x est FreeBSD donc ça devrait être "facilement" portable vers linux.
Hors ligne gnomnain # Posté le 13/02/2010 à 22:10:46
Blblbl !
Avatar
Groupe : Anciens

LLVM marche très bien sous Linux, je l'ai sur ma machine.

Sinon, l'intérêt de transformer dans un langage intermédiaire, c'est qu'il y a pas mal de choses qu'il n'y a pas à réimplémenter. Il y a juste à traduire dans une forme correcte, sans se soucier d'optimiser l'utilisation des registres, tout ça, et LLVM appliquera un tas d'optimisations tout seul, de façon totalement indépendante du langage (et parfois plus faciles à appliquer à ce niveau). Donc, ça évite de dupliquer des efforts qui pourraient être mis en commun.
Cette technique est adoptée par beaucoup de compilateur. Par exemple, GHC (un compilateur pour Haskell) compile le code haskell en C-- (en appliquant des optimisations propres à haskell), puis le C-- est compilé par un autre compilateur qui sait optimiser le C-- (c'est un sous-ensemble de C).

Image utilisateur
Haskell - Learn You a Haskell - Real World Haskell - xmonad - OCaml
Apprenez Haskell ! - #ircduzero
<colbseton> Serialk: tu cherches vraiment des liens logiques dans tout ce que je raconte ?
 
Hors ligne e=mc2 # Posté le 13/02/2010 à 22:13:18
Avatar

Ville : Le bonhomme
Pays : France métropolitaine

Très intéressant, surtout le fait que ça soit plus performant que gcc o_O .
Je vais tester ça au plus vite !

Image utilisateur
 
Hors ligne Android # Posté le 13/02/2010 à 22:16:50
Qui a dit Android ?
Avatar
Groupe : Bannis

Intéressant ce compilateur, mais pourquoi traduire le C++ Objective-C en un autres langages, sinon très bonne news merci gnomnain !

Image utilisateur
Image utilisateur
 
Hors ligne Tchouk! # Posté le 13/02/2010 à 22:19:41
Avatar
Groupe : Bannis
Flux RSS

Pour le compiler ?

NeXTSTEP, l'ancêtre de Mac OS X — en 1993.
Image utilisateur
Si vous avez des couilles et que vous aimez
la programmation sans chichis, venez sur PM !
 
Pour accéder à cette section
Connectez-vous !
connexion_rpx

Revenir à la liste des news