SlideShare a Scribd company logo
1 of 10
Download to read offline
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 ?

More Related Content

Similar to LLVM, clang & c++

Enib cours c.a.i. web - séance #5 : scala play! framework
Enib   cours c.a.i. web - séance #5 : scala play! frameworkEnib   cours c.a.i. web - séance #5 : scala play! framework
Enib cours c.a.i. web - séance #5 : scala play! frameworkHoracio Gonzalez
 
Pipeline Devops - Intégration continue : ansible, jenkins, docker, jmeter...
Pipeline Devops - Intégration continue : ansible, jenkins, docker, jmeter...Pipeline Devops - Intégration continue : ansible, jenkins, docker, jmeter...
Pipeline Devops - Intégration continue : ansible, jenkins, docker, jmeter...XavierPestel
 
Apache Flink par Bilal Baltagi Paris Spark Meetup Dec 2015
Apache Flink par Bilal Baltagi Paris Spark Meetup Dec 2015Apache Flink par Bilal Baltagi Paris Spark Meetup Dec 2015
Apache Flink par Bilal Baltagi Paris Spark Meetup Dec 2015Modern Data Stack France
 
Lightning talk: Les Load Balancers HTTP modernes
Lightning talk: Les Load Balancers HTTP modernesLightning talk: Les Load Balancers HTTP modernes
Lightning talk: Les Load Balancers HTTP modernesFrederic Leger
 
I le langage java d'una manière avancée introduction
I  le langage java d'una manière avancée introductionI  le langage java d'una manière avancée introduction
I le langage java d'una manière avancée introductionsabrine_hamdi
 
Explorez vos données présentes dans MongoDB avec Apache Zeppelin
Explorez vos données présentes dans MongoDB avec Apache ZeppelinExplorez vos données présentes dans MongoDB avec Apache Zeppelin
Explorez vos données présentes dans MongoDB avec Apache ZeppelinBruno Bonnin
 
GPGPU facile avec JavaCL, et trivial avec ScalaCL !
GPGPU facile avec JavaCL, et trivial avec ScalaCL !GPGPU facile avec JavaCL, et trivial avec ScalaCL !
GPGPU facile avec JavaCL, et trivial avec ScalaCL !ochafik
 
ES6, le futur de Javascript
ES6, le futur de JavascriptES6, le futur de Javascript
ES6, le futur de JavascriptOpenska
 
Shell sans les coquilles
Shell sans les coquillesShell sans les coquilles
Shell sans les coquillesÉdouard Lopez
 
Open Wide : Les outils pour le développement des systemes embarques
Open Wide : Les outils pour le développement des systemes embarquesOpen Wide : Les outils pour le développement des systemes embarques
Open Wide : Les outils pour le développement des systemes embarquesAlexandre LAHAYE
 
Alphorm.com Formation Le Language C
Alphorm.com  Formation Le Language C Alphorm.com  Formation Le Language C
Alphorm.com Formation Le Language C Alphorm
 
Optimisation LAMP
Optimisation LAMPOptimisation LAMP
Optimisation LAMPcyruss666
 
Monitoring d'applications/environnements PHP : APM et Pinba
Monitoring d'applications/environnements PHP : APM et PinbaMonitoring d'applications/environnements PHP : APM et Pinba
Monitoring d'applications/environnements PHP : APM et PinbaIdaf_1er
 
Big Data Viz (and much more!) with Apache Zeppelin
Big Data Viz (and much more!) with Apache ZeppelinBig Data Viz (and much more!) with Apache Zeppelin
Big Data Viz (and much more!) with Apache ZeppelinBruno Bonnin
 
Apache Kafka, Un système distribué de messagerie hautement performant
Apache Kafka, Un système distribué de messagerie hautement performantApache Kafka, Un système distribué de messagerie hautement performant
Apache Kafka, Un système distribué de messagerie hautement performantALTIC Altic
 

Similar to LLVM, clang & c++ (20)

Enib cours c.a.i. web - séance #5 : scala play! framework
Enib   cours c.a.i. web - séance #5 : scala play! frameworkEnib   cours c.a.i. web - séance #5 : scala play! framework
Enib cours c.a.i. web - séance #5 : scala play! framework
 
Pipeline Devops - Intégration continue : ansible, jenkins, docker, jmeter...
Pipeline Devops - Intégration continue : ansible, jenkins, docker, jmeter...Pipeline Devops - Intégration continue : ansible, jenkins, docker, jmeter...
Pipeline Devops - Intégration continue : ansible, jenkins, docker, jmeter...
 
introduction au CPP
introduction au CPPintroduction au CPP
introduction au CPP
 
Apache Flink par Bilal Baltagi Paris Spark Meetup Dec 2015
Apache Flink par Bilal Baltagi Paris Spark Meetup Dec 2015Apache Flink par Bilal Baltagi Paris Spark Meetup Dec 2015
Apache Flink par Bilal Baltagi Paris Spark Meetup Dec 2015
 
Lightning talk: Les Load Balancers HTTP modernes
Lightning talk: Les Load Balancers HTTP modernesLightning talk: Les Load Balancers HTTP modernes
Lightning talk: Les Load Balancers HTTP modernes
 
I le langage java d'una manière avancée introduction
I  le langage java d'una manière avancée introductionI  le langage java d'una manière avancée introduction
I le langage java d'una manière avancée introduction
 
Explorez vos données présentes dans MongoDB avec Apache Zeppelin
Explorez vos données présentes dans MongoDB avec Apache ZeppelinExplorez vos données présentes dans MongoDB avec Apache Zeppelin
Explorez vos données présentes dans MongoDB avec Apache Zeppelin
 
GPGPU facile avec JavaCL, et trivial avec ScalaCL !
GPGPU facile avec JavaCL, et trivial avec ScalaCL !GPGPU facile avec JavaCL, et trivial avec ScalaCL !
GPGPU facile avec JavaCL, et trivial avec ScalaCL !
 
ES6, le futur de Javascript
ES6, le futur de JavascriptES6, le futur de Javascript
ES6, le futur de Javascript
 
Shell sans les coquilles
Shell sans les coquillesShell sans les coquilles
Shell sans les coquilles
 
Open Wide : Les outils pour le développement des systemes embarques
Open Wide : Les outils pour le développement des systemes embarquesOpen Wide : Les outils pour le développement des systemes embarques
Open Wide : Les outils pour le développement des systemes embarques
 
Alphorm.com Formation Le Language C
Alphorm.com  Formation Le Language C Alphorm.com  Formation Le Language C
Alphorm.com Formation Le Language C
 
Mongo DB
Mongo DBMongo DB
Mongo DB
 
Optimisation LAMP
Optimisation LAMPOptimisation LAMP
Optimisation LAMP
 
Liquibase
LiquibaseLiquibase
Liquibase
 
C#
C#C#
C#
 
Monitoring d'applications/environnements PHP : APM et Pinba
Monitoring d'applications/environnements PHP : APM et PinbaMonitoring d'applications/environnements PHP : APM et Pinba
Monitoring d'applications/environnements PHP : APM et Pinba
 
Big Data Viz (and much more!) with Apache Zeppelin
Big Data Viz (and much more!) with Apache ZeppelinBig Data Viz (and much more!) with Apache Zeppelin
Big Data Viz (and much more!) with Apache Zeppelin
 
Apache kafka big data track
Apache kafka   big data trackApache kafka   big data track
Apache kafka big data track
 
Apache Kafka, Un système distribué de messagerie hautement performant
Apache Kafka, Un système distribué de messagerie hautement performantApache Kafka, Un système distribué de messagerie hautement performant
Apache Kafka, Un système distribué de messagerie hautement performant
 

LLVM, clang & c++

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