Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.

LLVM, clang & c++

625 Aufrufe

Veröffentlicht am

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

Veröffentlicht in: Software
  • Als Erste(r) kommentieren

  • Gehören Sie zu den Ersten, denen das gefällt!

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 ?

×