Movatterモバイル変換


[0]ホーム

URL:


Aller au contenu
Wikipédial'encyclopédie libre
Rechercher

Clang

Un article de Wikipédia, l'encyclopédie libre.
Clang

Description de l'image Clang 13.0.1 version information screenshot.png.
Informations
Développé parApple,Microsoft,Google,ARM,Sony,Intel etAMDVoir et modifier les données sur Wikidata
Dernière version20.1.0 ()[1]Voir et modifier les données sur Wikidata
Version avancée20.1.0-rc3 ()[2]Voir et modifier les données sur Wikidata
Dépôtgithub.com/llvm/llvm-projectVoir et modifier les données sur Wikidata
Écrit enC++ etCVoir et modifier les données sur Wikidata
Système d'exploitationType Unix,Linux,GNU/Linux,OpenBSD,NetBSD,FreeBSD,DragonFly BSD et MINIX 3(en)Voir et modifier les données sur Wikidata
EnvironnementMultiplateforme(en),Linux,FreeBSD,NetBSD,OpenBSD, MINIX 3(en),DragonFly BSD,Berkeley Software Distribution,x86,x86-64,RISC-V,architecture ARM,PowerPC etWebAssemblyVoir et modifier les données sur Wikidata
TypeCompilateurVoir et modifier les données sur Wikidata
LicenceLicence Open Source NCSA/Université de l'Illinois et Apache License v2.0 with LLVM Exceptions(d)Voir et modifier les données sur Wikidata
Site webclang.llvm.orgVoir et modifier les données sur Wikidata

modifier -modifier le code -voir Wikidata(aide)

Clang est uncompilateur pour leslangages de programmationC,C++ etObjective-C. Son interface de bas niveau utilise lesbibliothèquesLLVM pour la compilation.

C'est unlogiciel libre issu d'un projet de rechercheuniversitaire et distribué selon les termes de lalicence Open Source NCSA/Université de l'Illinois[3].

Clang est aujourd'hui maintenu par une large communauté, dont de nombreux employés deApple, Google, ARM ou Mozilla, dans le cadre du projetLLVM.[réf. nécessaire]

Son but est de proposer une alternative àGCC.

Histoire

[modifier |modifier le code]

En 2005, Apple utilise LLVM dans de nombreux projets commerciaux, dont l'iOS SDK etXcode 3.1.

L'une de ces utilisations était un compilateur de codeOpenGL pourMac OS X qui convertit les appels aux fonctions OpenGL en instructionsGPU pour des processeurs graphiques qui ne possédaient pas toutes les fonctionnalités requises. Cela a permis à Apple de supporter l'API OpenGL complète sur des ordinateurs utilisant des GPUIntel GMA, améliorant les performances sur ces machines[4].

LLVM devait à l'origine être la base d'une nouvelle version de GCC, car GCC posait des problèmes à la fois aux développeurs de LLVM et à Apple. GCC est un large projet et son développement est complexe : comme un ancien développeur de GCC l'a dit« Essayer de faire danser l'hippopotame n'est pas vraiment très plaisant »[5]et l'un des participants auGoogle Summer of Code commenta que« Lire le code de GCC a été un exercice très difficile pour moi. En fait c'est le seul projet pour lequel je sais que cela devient de plus en plus difficile au fil du temps »[6].

Apple utilise énormémentObjective-C, mais le front-end GCC de ce langage a une faible priorité pour les développeurs[réf. nécessaire]. De plus, GCC s'intègre mal à l'IDE d'Apple[7].Enfin, GCC est distribué sous licenceGPL version 3, ce qui impose aux développeurs qui distribuent des extensions pour GCC ou des versions modifiées de celui-ci de publier leurcode source, alors que LLVM utilise une licence de typeBSD[8] ce qui permet l'utilisation de son code dans un programme propriétaire.

Apple a choisi de développer un nouveau compilateur ne supportant queC99, Objective C et C++[7].Le projet Clang a été renduopen-source en juillet 2007[9].

Design

[modifier |modifier le code]

Clang est conçu pour fonctionner avec LLVM[8]. L'ensemble des deux fournit unechaîne de compilation permettant de remplacer entièrement GCC. Parce qu'il a été conçu sous forme de bibliothèque, tout comme le reste de LLVM, Clang est facilement utilisable dans d'autres applications comme dansVim.

L'un des buts principaux de Clang est son meilleur support de lacompilation incrémentale, afin de permettre de mieux utiliser le compilateur à travers unIDE. GCC a été conçu pour utiliser un classique schéma de compilation-édition de lien-débogage, et bien qu'il fournisse des outils de compilation incrémentale et decompilation à la volée, les intégrer avec d'autres outils n'est pas toujours facile. Par exemple, GCC a une étape appelée « pliage » qui est la clé du processus de compilation mais qui a pour effet de transformer l'arbre de compilation d'une manière qui ne le fait plus ressembler au code original. Si une erreur est trouvée pendant ou après cette étape, il peut être difficile de retrouver l'endroit dans le code d'où celle-ci provient. De plus, les IDE utilisant GCC comme chaîne de compilation utilisent d'autres outils pour fournir lacoloration syntaxique ou l'autocomplétion.

Clang est conçu pour retenir plus d'informations pendant le processus de compilation que GCC et préserver la forme globale du code originel. L'objectif étant de retracer plus facilement l'origine du problème. Les rapports d'erreurs de Clang sont aussi conçus pour être plus détaillés et spécifiques, et pour être plus facilement utilisables dans un IDE. Sa conception modulaire permet d'indexer le code source, de vérifier la syntaxe ainsi que d'autres fonctionnalités associées audéveloppement rapide d'applications. L'arbre syntaxique est aussi plus adapté auréusinage automatique puisqu'il reste sous forme de texte parsable.

Clang est modulaire, basé entièrement sur des bibliothèques remplaçables à l'édition des liens (à l'opposé des modules qui peuvent être combinés à la compilation) et bien documenté. Dans quelques cas, les bibliothèques sont fournies en plusieurs versions qui peuvent être échangées à l'exécution ; par exemple le parseur possède une version qui offre des mesures de performance du processus de compilation.

Clang, comme son nom l'indique, est un compilateur supportant uniquement des langages basés sur le C. Il n'offre aucun support pour les langages autres que C, C++, Objective-C et Objective-C++. Dans beaucoup de cas, Clang peut remplacer GCC, sans impact sur les chaines de constructions des logiciels. En effet, clang supporte la plupart des options de GCC.

Performances et compatibilité avec GCC

[modifier |modifier le code]

Les développeurs de Clang affirment qu'il utilise moins de mémoire et est plus rapide que les compilateurs concurrents, dont GCC. Comme preuve de cela, ils indiquent que, en octobre 2007, Clang a compilé la bibliothèqueCarbon au moins deux fois plus rapidement que GCC, en utilisant environ 6 fois moins de mémoire et d'espace disque[10].

La compatibilité de Clang avec GCC est très bonne, et la compilation généralement plus rapide. Les performances des programmes compilés avec LLVM/Clang ont un temps été moins bonnes que celles de GCC[11],[12], mais à la mi-2012, GCC gagne sur certainsbenchmarks et Clang sur d'autres.

Dérivés

[modifier |modifier le code]

Clang (etLLVM) sont souslicence libre non-copyleft, ce qui implique qu'ils peuvent être modifiés avec du code souslicence propriétaire.

Microsoft utilise ainsi Clang comme base de son compilateur pourDirectX :HLSL. Celui-ci n'était pas libre, jusqu'à son placement souslicence libre début 2017[13].

Notes et références

[modifier |modifier le code]
  1. « LLVM 20.1.0 »,(consulté le)
  2. « LLVM 20.1.0-rc3 »,(consulté le)
  3. (en)licence Open Source NCSA/Université de l'Illinois sur le site du LLVM.
  4. (en) Chris Lattner« LLVM for OpenGL and other stuff » ()(lire en ligne)Modèle:Slides
    LLVM Developers' Meeting(lire en ligne)
  5. Zadeck, Kenneth (19 novembre 2005).(en)Re: LLVM/GCC Integration Proposal". GCC development mailing list.
  6. Apostolou, Dimitrios (5 July 2011).(en)"GSOC - Student Roundup". GCC development mailing list.
  7. a etbSteve Naroff« New LLVM C Front-end » ()(lire en ligne)Modèle:Slides
    LLVM Developers' Meeting(lire en ligne)
  8. a etbClang team,clang: a C language family frontend for LLVM
  9. Naroff, Steve (25 mai 2007)."New LLVM C Front-end" (Slides).Developers' Meeting.
  10. (en) [« Clang - Features and Goals: Fast compiles and Low Memory Use »|http://clang.llvm.org/features.html], octobre 2007
  11. (en) VolkerSimonis, « Compiling the HotSpot VM with Clang »,(consulté le) :« While the overall GCC compatibility is excellent and the compile times are impressive, the performance of the generated code is still lacking behind a recent GCC version. »
  12. (en) « Benchmarking LLVM & Clang Against GCC 4.5 »,Phoronix,(consulté le) :« Binaries from LLVM-GCC and Clang both struggled to compete with GCC 4.5.0 in the timed HMMer benchmark of a Pfam database search. LLVM-GCC and Clang were about 23% slower(...)Though LLVM / Clang isn't the performance champion at this point, both components continue to be under very active development and there will hopefully be more news to report in the coming months »
  13. [Le compilateur de DirectX se libèrehttp://www.toolinux.com/Le-compilateur-de-DirectX-se]

Article connexe

[modifier |modifier le code]

Liens externes

[modifier |modifier le code]

(en)Site officiel


Ce document provient de « https://fr.wikipedia.org/w/index.php?title=Clang&oldid=216584408 ».
Catégories :
Catégories cachées :

[8]ページ先頭

©2009-2025 Movatter.jp