Download - LLVM, clang & c++
LLVM, Clang & C++
LLVM, Clang & C++
Présentation du projet
Clang
Instrumentation
Complétion & Indexation
Formatage de code source
Analyse statique
Réécriture de code source
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
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
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
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
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
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
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
Questions ?