llvm, clang & c++

10
LLVM, Clang & C++

Upload: cppfrug

Post on 17-Jul-2015

126 views

Category:

Software


7 download

TRANSCRIPT

Page 1: LLVM, clang & c++

LLVM, Clang & C++

Page 2: 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

Page 3: LLVM, clang & c++

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

Page 4: LLVM, clang & c++

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

Page 5: LLVM, clang & c++

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

Page 6: LLVM, clang & c++

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

Page 7: LLVM, clang & c++

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

Page 8: LLVM, clang & c++

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

Page 9: LLVM, clang & c++

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

Page 10: LLVM, clang & c++

Questions ?