Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

LLVM, clang & c++

587 views

Published on

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, ...

Published in: Software
  • Be the first to comment

  • Be the first to like this

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 ?

×