LLVM, Clang & C++
LLVM, Clang & C++ 
Présentation du projet 
Clang 
Instrumentation 
Complétion & Indexation 
Formatage de code source 
Anal...
Le projet LLVM 
● Ce n’est plus un acronyme ! 
● Collection modulaire de composants réutilisables liés à la 
compilation :...
Clang 
● Compilateur C, C++ (C++98,11 & 14), ObjC : 
○ rapide + faible consommation mémoire 
○ diagnostiques expressifs 
○...
Instrumentation (i.e. sanitizers) 
● Contribué par Google (pour Clang & GCC) 
● Instrumentation à la compilation pour véri...
Complétion & Indexation 
● Clang fournit la libclang 
○ libclang donne accès à l’AST d’une unité de compilation 
○ l’utili...
Formatage de code source 
● Le formatage, c’est important ! 
● Formatage != indentation 
● Pas si simple que ça a implémen...
Analyse statique 
● Analyse statique != compilation 
● Clang propose un moteur d’analyse statique: 
○ Démo : clang --analy...
Réécriture de code source 
● Les bases de code de LLVM / Clang étaient en C++98 
● Problème : comment les faire migrer ver...
Questions ?
Prochain SlideShare
Chargement dans…5
×

LLVM, clang & c++

443 vues

Publié le

Le projet LLVM est surtout connu pour son compilateur C/C++/ObjC : clang. LLVM offre cependant beaucoup plus qu'un compilateur. Cette présentation sera une brève introduction aux différents outils disponibles pour la programmation en C++: indexation, formatage, analyse statique, annotations, réécriture de code source, ...

Publié dans : Logiciels
0 commentaire
0 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

  • Soyez le premier à aimer ceci

Aucun téléchargement
Vues
Nombre de vues
443
Sur SlideShare
0
Issues des intégrations
0
Intégrations
14
Actions
Partages
0
Téléchargements
9
Commentaires
0
J’aime
0
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

LLVM, clang & c++

  1. 1. LLVM, Clang & C++
  2. 2. LLVM, Clang & C++ Présentation du projet Clang Instrumentation Complétion & Indexation Formatage de code source Analyse statique Réécriture de code source
  3. 3. Le projet LLVM ● Ce n’est plus un acronyme ! ● Collection modulaire de composants réutilisables liés à la compilation : ○ LLVM Core : optimiseurs IR, génération de code ○ Clang: compilateur C/C++/ObjC ○ LLDB: debugger ○ libcxx: implémentation de la librairie standard C++11/14 ○ … ● Licence de style BSD ● http://www.llvm.org
  4. 4. Clang ● Compilateur C, C++ (C++98,11 & 14), ObjC : ○ rapide + faible consommation mémoire ○ diagnostiques expressifs ○ compatible gcc ○ parser unifié C, C++, ObjC ● environ 855k lignes de C++11 (stats ohloh) ● conception modulaire: librairies réutilisables ○ lldb ○ exemples de réutilisation dans la suite de la présentation ! ● Plateforme: ○ OS: MacOS, Linux, BSD, Windows ○ arch: x86, arm ● Quelques annonces récentes : ○ le compilateur v6 de ARM est basé sur LLVM + Clang ○ le prochain compilateur d’Intel utilise Clang mais garde son propre backend ● http://clang.llvm.org
  5. 5. Instrumentation (i.e. sanitizers) ● Contribué par Google (pour Clang & GCC) ● Instrumentation à la compilation pour vérifier à l'exécution : ○ asan : Use-after-{free,return}, {heap,stack,global}-buffer-overflow ○ tsan : détection de course de données, ordre d’initialisation des globaux ○ msan : lecture de mémoire non initialisée ○ ubsan : comportement non définis par la norme ● Objectif: ○ vitesse ○ pas de faux positifs ● Démo: asan
  6. 6. Complétion & Indexation ● Clang fournit la libclang ○ libclang donne accès à l’AST d’une unité de compilation ○ l’utilisateur peut parcourir l’AST pour faire ses propres analyses et/ou traitements sur le code source ○ En fonction du contexte d’un curseur, libclang fournit les complétions possibles ● Plus besoin de développer son propre parser C++11 ! ● Démo: vim+clang_complete ○ complétion ○ indexation
  7. 7. Formatage de code source ● Le formatage, c’est important ! ● Formatage != indentation ● Pas si simple que ça a implémenter ○ les algos pour le retour à la ligne ressemblent beaucoup à ceux de TeX ● Fonctionnalité dans libFormat ● Utilisé en différentes incarnations: clang-format, clang-format-diff, plugins Emacs/Vim/VS/… ● Démo: vim+clang_format
  8. 8. Analyse statique ● Analyse statique != compilation ● Clang propose un moteur d’analyse statique: ○ Démo : clang --analyze ● Clang propose aussi un outil pour rajouter “simplement” ses propres vérifications, au niveau AST et/ou utilisant le moteur d’analyse statique si besoin est : ○ Démo : clang-tidy
  9. 9. Réécriture de code source ● Les bases de code de LLVM / Clang étaient en C++98 ● Problème : comment les faire migrer vers C++11 ? ○ A la main... ○ Anticiper les évolutions du C++ ○ Utiliser des outils ● Démo : clang-modernize
  10. 10. Questions ?

×