SlideShare une entreprise Scribd logo
1  sur  41
Roslyn: La plateforme de compilation
.NET
Kevin Avignon
AVANT DE COMMENCER LA PRÉSENTATION
Qui suis-je ?
 Étudiant en génie des technologies de l’information (ÉTS)
 Membre de MSDEVMTL depuis Oct. ‘14
 Contributeur de la librairie Code Cracker (CC) sur Github
 Bloggeur .NET sur le site www.diveintodotnet.com
 Participant au Google Summer of Code 2015 avec Mono Project
(Xamarin) et la librairie NRefactory
 Rédacteur pour le Visual Studio Magazine
Plan de la présentation
1. Introduction sur Roslyn
2. Librairies utilisant Roslyn
3. Introduction sur Syntax & Symbol
4. Comment employer le Syntax Visualizer
5. Bâtir son premier analyzer en C#
6. Qu'est-ce qu'un code fix provider
7. Les pièges à éviter en faisant de l'analyse
8. Q&A
1. Introduction sur Roslyn
Les pré-requis
• Visual Studio 2015 Ultimate CTP 6 ou
Visual Studio 2015 RC
• .NET Compiler Platform SDK Templates
• .NET Compiler Platform Syntax Visualizer
• Soit en NuGet package ou VSIX
Qu'est-ce que Roslyn ?
• Roslyn est le nom du projet Open source de Microsoft
• Beaucoup plus gros qu'un simple API
– Compilateur
• Compiler as a Service
– Scripts
– Différentes stacks d'IDE
– Analyse sémantique du code
 Un CaaS n’est pas comme
IaaS ou Paas ou SaaS
Considéré comme un service Windows
 “Reengineering” du compilateur .NET
 Expose differentes phase de la
compilation du code
Compiler as a Service
Une plateforme de compilation
• Ensemble d'APIS
– Bâtie au-dessus des compilateur C# &
VB.NET
– Permet l'inspection de code source
– Permet la transformation de code source
◦ Ancienne manière dite “black box”
▫ Écriture du code
▫ Écriture de tests
▫ Génération d’assemblies, dlls, etc
▫ Refactor le code selon les besoins du client
La vie avant Roslyn
◦ Accès à la dite black box
 Information sémantique & syntaxique
◦ Les langages .NET sont en mesure de consommer et
générer du code au runtime
◦ Accepter un arbre syntaxique
◦ Générer un arbre syntaxique
Une nouvelle vie
Consommation de code (String)
Diagnostic Analyzer
• Analyse du code source
– Cible l'erreur indiquée
– Envoie un message à l'utilisateur
– Se concentre sur différents morceaux du
fichier
– Fonctionne en compilation-time
2. Librairies utilisant Roslyn
◦ CC0001 - Always Use Var Analyzer +
refactoring
◦ CC0007 - If Return Always Analyzer +
refactoring
◦ CC0008 - Object Initializer analyzer +
refactoring
Code Cracker (Github)
AP1000 - Do not use async in Run method
Code analysis for Azure - Microsoft
 ConvertToConstant
 Variable locale -> const
 ConvertIfStatementToConditionalTernaryExpression
 (if -> ?:)
 ConvertIfStatementToNullCoalescingExpression
 (if -> ??)
 ForCanBeConvertedToForeach
 (for -foreach)
NRefactory - Mono Project
3. Introduction sur Syntax & Symbol
◦ Représentation syntaxique du code (.NET)
 Produit par le compilateur
◦ Construit par divers éléments
 Syntax nodes
 Syntax tokens
 Syntax trivia
L’arbre syntaxique
◦ Nodes (noeuds): Élements principaux de l’arbre
syntaxique
 Représente une multitude de construction syntaxique
ObjectCreationExpressionSyntax, InvocationExpressionSyntax,etc
 token et trivia dépendent du noeud courant
 Ne dépendent pas d’un langage spécifique
Syntax Node - I
o Se définit avec un span de character
 TextSpan : [Début, Longueur]
 Ne prend pas en compte le trivia
o Un noeud a connaissance de ces enfants & descendants
 IEnumerable<SyntaxNode>
Syntax Node - II
 Syntax Token
– Représente des petits fragments de code
– Keywords (int, lock, abstract)
– Identifiants (noms de variables
• Syntax Trivia
– Représente le trivia dans l'arbre syntaxique
• End of line trivia
• Whitespace trivia
Syntax Tokens & Syntax Trivia
ISymbol & ITypeSymbol
• ISymbol
– Représentation dans l'arbre syntaxique
• namespace, classe, struct
– Information sur les noeuds exposée par le compilateur
– Permet de valider le type d'un noeud
• ITypeSymbol
– Représentation de l'information d'implémentation
– Accès aux bases type d'un noeud
– Accès aux interfaces implémentées par un noeud
4. Comment employer le Syntax Visualizer
◦ Il faut beaucoup d’éléments pour
initialiser un objet
▫ VariableDeclarationSyntax
▫ LocalVariableDeclarationSyntax
▫ EqualsClauseSyntax
▫ ObjectCreationExpressionSyntax
▫ Possiblement AnonymousExpressionSyntax
L'initialisation d'un objet
Valider le type d’une syntaxe (démo)
5. Bâtir son premier analyzer en C#
o Node: SyntaxNode
 Noued (s) spécifié dans l’analyse
o Semantic Model: SemanticModel
 Garde en mémoire (cache) les symbols locaux
 Résolver un symbol en runtime
 Information sémantique concernant les noeuds dans l’arbre
o ReportDiagnostic: Action<Diagnostic>
 DiagnosticDescriptor
 Rule
 Location
SyntaxNodeAnalysisContext struct
Always Use Var Diagnostic Analyzer
(démo)
6. Qu'est-ce qu'un code fix provider ?
o Les raisons pour implémenter cet analyzer
 Améliore la lisibilité
 Rend le code plus uniforme
 Assez facile à implémenter
o Fonctionnement
1. Rechercher tous les local variables
2. Valider celles de type “var”
3. Envoyer une erreur si jamais != var
Always use var for local variables
Code fix provider
Exploite le Diagnostic Analyzer
Refactor le “mauvais” code
Manière rapide de corriger une erreur
Donne une bonne estimation de la marche à suivre
Nécéssite de manipuler l’arbre syntaxique
• Ajout d'un syntax node
• Délétion d'un syntax node
• modification d’un syntax node
Always Use Var Code Fix Provider
(démo)
7. Les pièges à éviter en faisant de l’analyse
 Lorsqu’il s’agit d’une declaration
o GetDeclaredSymbol <- SemanticModel
 Classe
 Enum
 Variable (locale, champs, propriété, anonyme)
 Interface
 Struct
 Sinon
 GetSymbolInfo <- SemanticModel
Résolver un symbol
 Outil très puissant
 Valide rapidement ce qui faut
o Symbol
o SyntaxNode
o Trivia
o Token
Ne pas employer Syntax Visualizer
◦ Préférable de développer en TDD
◦ Tenter de penser aux edge cases
▫ Les plus susceptibles de briser votre logique
◦ Réduction du temps en QA
Ne pas faire de unit tests (TDD)
◦ À utiliser dans de rares circonstances
▫ MetadataName
▫ typeof
▫ Retrouver l'objet TypeInfo avec SemanticModel.GetTypeInfo()
◦ Effet sur la performance de l’analyzer
▫ Retraverse l’arbre à chaque invocation pour créer un string
▫ Ne place aucune information en cache.
Employer la méthode ToDisplayString()
◦ Les patrons GoF peuvent procurer de
bonnes façons de refactorer le code
▫ Stratégie
▫ Template
▫ Visiteur
 Walker
Se refamiliariser avec GoF
8. Q & A
1. https://github.com/dotnet/roslyn
2. http://www.infoworld.com/article/2621132/microsoft-net/microsoft-s-roslyn--reinventing-the-compiler-as-we-
know-it.html
3. http://www.i-programmer.info/professional-programmer/i-programmer/7154-c-guru-an-interview-with-eric-
lippert.html
4. http://davefancher.com/2014/11/12/i-can-analyze-code-and-so-can-you/
5. http://www.dreamincode.net/forums/blog/217/entry-4754-wrote-my-first-roslyn-diagnostic-and-code-fix-today/
(VB.NET Analyzer + Code Fix)
6. http://blog.jetbrains.com/dotnet/2014/04/10/resharper-and-roslyn-qa/
7. https://channel9.msdn.com/Events/TechDays/Techdays-2012-the-Netherlands/2293
8. https://channel9.msdn.com/coding4fun/blog/The-future-of-NET-today-The-NET-Compiler-Platform
9. https://msdn.microsoft.com/en-us/magazine/dn904670.aspx
Sources

Contenu connexe

Tendances

Javascript un langage supérieur
Javascript un langage supérieurJavascript un langage supérieur
Javascript un langage supérieurFredy Fadel
 
Nouveautés JavaScript dans le monde Microsoft
Nouveautés JavaScript dans le monde MicrosoftNouveautés JavaScript dans le monde Microsoft
Nouveautés JavaScript dans le monde Microsoftdavrous
 
OSIS 2017 - Scala REX dans Rudder
OSIS 2017 - Scala REX dans Rudder OSIS 2017 - Scala REX dans Rudder
OSIS 2017 - Scala REX dans Rudder RUDDER
 
Présentation de ECMAScript 6
Présentation de ECMAScript 6Présentation de ECMAScript 6
Présentation de ECMAScript 6Julien CROUZET
 
Javascript pour les Développeurs WEB
Javascript pour les Développeurs WEBJavascript pour les Développeurs WEB
Javascript pour les Développeurs WEBAbbes Rharrab
 
Une introduction à Javascript et ECMAScript 6
Une introduction à Javascript et ECMAScript 6Une introduction à Javascript et ECMAScript 6
Une introduction à Javascript et ECMAScript 6Jean-Baptiste Vigneron
 
Présentation Groovy
Présentation GroovyPrésentation Groovy
Présentation Groovyguest6e3bed
 
Introduction à JavaScript
Introduction à JavaScriptIntroduction à JavaScript
Introduction à JavaScriptMicrosoft
 
191121 philippe teuwen cryptographie et attaques materielles
191121 philippe teuwen cryptographie et attaques materielles191121 philippe teuwen cryptographie et attaques materielles
191121 philippe teuwen cryptographie et attaques materiellesGeeks Anonymes
 
Voxxdays luxembourg 2016 retours java 8
Voxxdays luxembourg 2016 retours java 8Voxxdays luxembourg 2016 retours java 8
Voxxdays luxembourg 2016 retours java 8Jean-Michel Doudoux
 
C# 5 versus Java 8... Quand C++ 11 s'invite à la fête
C# 5 versus Java 8... Quand C++ 11 s'invite à la fêteC# 5 versus Java 8... Quand C++ 11 s'invite à la fête
C# 5 versus Java 8... Quand C++ 11 s'invite à la fêteFabrice JEAN-FRANCOIS
 
Introduction à Ruby on Rails
Introduction à Ruby on RailsIntroduction à Ruby on Rails
Introduction à Ruby on RailsNovelys
 
Csharp2 : classes et objets
Csharp2 : classes et objetsCsharp2 : classes et objets
Csharp2 : classes et objetsAbdoulaye Dieng
 
Dotnet csharp
Dotnet csharpDotnet csharp
Dotnet csharpSDFG5
 

Tendances (18)

Javascript un langage supérieur
Javascript un langage supérieurJavascript un langage supérieur
Javascript un langage supérieur
 
Nouveautés JavaScript dans le monde Microsoft
Nouveautés JavaScript dans le monde MicrosoftNouveautés JavaScript dans le monde Microsoft
Nouveautés JavaScript dans le monde Microsoft
 
OSIS 2017 - Scala REX dans Rudder
OSIS 2017 - Scala REX dans Rudder OSIS 2017 - Scala REX dans Rudder
OSIS 2017 - Scala REX dans Rudder
 
Présentation de ECMAScript 6
Présentation de ECMAScript 6Présentation de ECMAScript 6
Présentation de ECMAScript 6
 
Javascript pour les Développeurs WEB
Javascript pour les Développeurs WEBJavascript pour les Développeurs WEB
Javascript pour les Développeurs WEB
 
Une introduction à Javascript et ECMAScript 6
Une introduction à Javascript et ECMAScript 6Une introduction à Javascript et ECMAScript 6
Une introduction à Javascript et ECMAScript 6
 
JAVA 8
JAVA 8JAVA 8
JAVA 8
 
Présentation Groovy
Présentation GroovyPrésentation Groovy
Présentation Groovy
 
Introduction à JavaScript
Introduction à JavaScriptIntroduction à JavaScript
Introduction à JavaScript
 
191121 philippe teuwen cryptographie et attaques materielles
191121 philippe teuwen cryptographie et attaques materielles191121 philippe teuwen cryptographie et attaques materielles
191121 philippe teuwen cryptographie et attaques materielles
 
Voxxdays luxembourg 2016 retours java 8
Voxxdays luxembourg 2016 retours java 8Voxxdays luxembourg 2016 retours java 8
Voxxdays luxembourg 2016 retours java 8
 
C# 5 versus Java 8... Quand C++ 11 s'invite à la fête
C# 5 versus Java 8... Quand C++ 11 s'invite à la fêteC# 5 versus Java 8... Quand C++ 11 s'invite à la fête
C# 5 versus Java 8... Quand C++ 11 s'invite à la fête
 
Cours1
Cours1Cours1
Cours1
 
Cours javascript v1
Cours javascript v1Cours javascript v1
Cours javascript v1
 
Javascript proprement
Javascript proprementJavascript proprement
Javascript proprement
 
Introduction à Ruby on Rails
Introduction à Ruby on RailsIntroduction à Ruby on Rails
Introduction à Ruby on Rails
 
Csharp2 : classes et objets
Csharp2 : classes et objetsCsharp2 : classes et objets
Csharp2 : classes et objets
 
Dotnet csharp
Dotnet csharpDotnet csharp
Dotnet csharp
 

En vedette

Premiers pas dans l'univers .NET
Premiers pas dans l'univers .NETPremiers pas dans l'univers .NET
Premiers pas dans l'univers .NETBantu Hub
 
La mission humanitaire à la République Democatique du Congo
La mission humanitaire à la République Democatique du CongoLa mission humanitaire à la République Democatique du Congo
La mission humanitaire à la République Democatique du CongoMichaelhenriquez1990
 
Biennale des Antiquaires : Diner de gala / Gala dinner
Biennale des Antiquaires : Diner de gala / Gala dinnerBiennale des Antiquaires : Diner de gala / Gala dinner
Biennale des Antiquaires : Diner de gala / Gala dinnerTolila Sylvie
 
Devenir le meilleur commercial de mon métier en 2 jours et 1 coaching
Devenir le meilleur commercial de mon métier en 2 jours et 1 coachingDevenir le meilleur commercial de mon métier en 2 jours et 1 coaching
Devenir le meilleur commercial de mon métier en 2 jours et 1 coachingtipsmarketing
 
IREPS17 - Catalogue Outils Pédagogiques Antenne 17
IREPS17 - Catalogue Outils Pédagogiques Antenne 17IREPS17 - Catalogue Outils Pédagogiques Antenne 17
IREPS17 - Catalogue Outils Pédagogiques Antenne 17IREPS17
 
Resume FR Alex Mestre avril 2013
Resume FR Alex Mestre avril 2013Resume FR Alex Mestre avril 2013
Resume FR Alex Mestre avril 2013Alex MESTRE GIMENEZ
 
#noreplywar : Les conclusions
#noreplywar : Les conclusions#noreplywar : Les conclusions
#noreplywar : Les conclusionsJonathan Loriaux
 
Net for God se présente
Net for God se présenteNet for God se présente
Net for God se présenteNet for God
 
Programme français cap 1
Programme français cap 1Programme français cap 1
Programme français cap 1JunonMidic
 
Power point (carrière informatique) a rendre
 Power point (carrière informatique) a rendre  Power point (carrière informatique) a rendre
Power point (carrière informatique) a rendre yamakuzayan1
 
Sillones finales
Sillones finalesSillones finales
Sillones finalesGraphpoint
 
Optimiser les images pour le web natalia
Optimiser les images pour le web nataliaOptimiser les images pour le web natalia
Optimiser les images pour le web nataliaNatalia Zhukova
 

En vedette (20)

Premiers pas dans l'univers .NET
Premiers pas dans l'univers .NETPremiers pas dans l'univers .NET
Premiers pas dans l'univers .NET
 
Le garbage collector .NEt
Le garbage collector .NEtLe garbage collector .NEt
Le garbage collector .NEt
 
Messaging
MessagingMessaging
Messaging
 
La mission humanitaire à la République Democatique du Congo
La mission humanitaire à la République Democatique du CongoLa mission humanitaire à la République Democatique du Congo
La mission humanitaire à la République Democatique du Congo
 
Biennale des Antiquaires : Diner de gala / Gala dinner
Biennale des Antiquaires : Diner de gala / Gala dinnerBiennale des Antiquaires : Diner de gala / Gala dinner
Biennale des Antiquaires : Diner de gala / Gala dinner
 
Devenir le meilleur commercial de mon métier en 2 jours et 1 coaching
Devenir le meilleur commercial de mon métier en 2 jours et 1 coachingDevenir le meilleur commercial de mon métier en 2 jours et 1 coaching
Devenir le meilleur commercial de mon métier en 2 jours et 1 coaching
 
IREPS17 - Catalogue Outils Pédagogiques Antenne 17
IREPS17 - Catalogue Outils Pédagogiques Antenne 17IREPS17 - Catalogue Outils Pédagogiques Antenne 17
IREPS17 - Catalogue Outils Pédagogiques Antenne 17
 
Iam wikipédia
Iam   wikipédiaIam   wikipédia
Iam wikipédia
 
Portefolio s
Portefolio sPortefolio s
Portefolio s
 
Les quatre bougies
Les quatre bougiesLes quatre bougies
Les quatre bougies
 
Resume FR Alex Mestre avril 2013
Resume FR Alex Mestre avril 2013Resume FR Alex Mestre avril 2013
Resume FR Alex Mestre avril 2013
 
Labo4de4vtecedit
Labo4de4vteceditLabo4de4vtecedit
Labo4de4vtecedit
 
#noreplywar : Les conclusions
#noreplywar : Les conclusions#noreplywar : Les conclusions
#noreplywar : Les conclusions
 
Paris En Australie pour DDP
Paris En Australie pour DDPParis En Australie pour DDP
Paris En Australie pour DDP
 
Labo 1 vtecedit_final
Labo 1  vtecedit_finalLabo 1  vtecedit_final
Labo 1 vtecedit_final
 
Net for God se présente
Net for God se présenteNet for God se présente
Net for God se présente
 
Programme français cap 1
Programme français cap 1Programme français cap 1
Programme français cap 1
 
Power point (carrière informatique) a rendre
 Power point (carrière informatique) a rendre  Power point (carrière informatique) a rendre
Power point (carrière informatique) a rendre
 
Sillones finales
Sillones finalesSillones finales
Sillones finales
 
Optimiser les images pour le web natalia
Optimiser les images pour le web nataliaOptimiser les images pour le web natalia
Optimiser les images pour le web natalia
 

Similaire à Kevin Avignon: Roslyn - La plateforme de compilation .NET

Ez18n Annotation Processing Tool in a nutshell
Ez18n Annotation Processing Tool in a nutshellEz18n Annotation Processing Tool in a nutshell
Ez18n Annotation Processing Tool in a nutshellgdigugli
 
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
 
Conférence #nwx2014 - Maxime Mauchaussée - Partager du code maintenable et év...
Conférence #nwx2014 - Maxime Mauchaussée - Partager du code maintenable et év...Conférence #nwx2014 - Maxime Mauchaussée - Partager du code maintenable et év...
Conférence #nwx2014 - Maxime Mauchaussée - Partager du code maintenable et év...Normandie Web Xperts
 
.NET Microframework: du code, de l&rsquo;électronique, de la robotique
.NET Microframework: du code, de l&rsquo;électronique, de la robotique.NET Microframework: du code, de l&rsquo;électronique, de la robotique
.NET Microframework: du code, de l&rsquo;électronique, de la robotiqueMicrosoft
 
#MSDEVMTL Introduction à #SonarQube
#MSDEVMTL Introduction à #SonarQube#MSDEVMTL Introduction à #SonarQube
#MSDEVMTL Introduction à #SonarQubeVincent Biret
 
Cours 2/3 - Architecture Web
Cours 2/3 - Architecture WebCours 2/3 - Architecture Web
Cours 2/3 - Architecture WebAdyax
 
Retours sur java 8 devoxx fr 2016
Retours sur java 8 devoxx fr 2016Retours sur java 8 devoxx fr 2016
Retours sur java 8 devoxx fr 2016Jean-Michel Doudoux
 
Elasticsearch 5.0 les nouveautés
Elasticsearch 5.0 les nouveautésElasticsearch 5.0 les nouveautés
Elasticsearch 5.0 les nouveautésMathieu Elie
 
Javascript & tools
Javascript & toolsJavascript & tools
Javascript & toolsSlim Soussi
 
OOP & Design Pattern - Algiers Developers Meetup August 2015
OOP & Design Pattern - Algiers Developers Meetup August 2015OOP & Design Pattern - Algiers Developers Meetup August 2015
OOP & Design Pattern - Algiers Developers Meetup August 2015Tarik Zakaria Benmerar
 
Développement d'un générateur d'intépréteur de bytecodes pour une JVM embarquée
Développement d'un générateur d'intépréteur de bytecodes pour une JVM embarquéeDéveloppement d'un générateur d'intépréteur de bytecodes pour une JVM embarquée
Développement d'un générateur d'intépréteur de bytecodes pour une JVM embarquéeMustapha Tachouct
 
Microservices-DDD-Telosys-Devoxx-FR-2022
Microservices-DDD-Telosys-Devoxx-FR-2022Microservices-DDD-Telosys-Devoxx-FR-2022
Microservices-DDD-Telosys-Devoxx-FR-2022Laurent Guérin
 

Similaire à Kevin Avignon: Roslyn - La plateforme de compilation .NET (20)

Ez18n Annotation Processing Tool in a nutshell
Ez18n Annotation Processing Tool in a nutshellEz18n Annotation Processing Tool in a nutshell
Ez18n Annotation Processing Tool in a nutshell
 
Hackerspace jan-2013
Hackerspace jan-2013Hackerspace jan-2013
Hackerspace jan-2013
 
Support NodeJS avec TypeScript Express MongoDB
Support NodeJS avec TypeScript Express MongoDBSupport NodeJS avec TypeScript Express MongoDB
Support NodeJS avec TypeScript Express MongoDB
 
Usine Logicielle 2013
Usine Logicielle 2013Usine Logicielle 2013
Usine Logicielle 2013
 
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
 
Conférence #nwx2014 - Maxime Mauchaussée - Partager du code maintenable et év...
Conférence #nwx2014 - Maxime Mauchaussée - Partager du code maintenable et év...Conférence #nwx2014 - Maxime Mauchaussée - Partager du code maintenable et év...
Conférence #nwx2014 - Maxime Mauchaussée - Partager du code maintenable et év...
 
.NET Microframework: du code, de l&rsquo;électronique, de la robotique
.NET Microframework: du code, de l&rsquo;électronique, de la robotique.NET Microframework: du code, de l&rsquo;électronique, de la robotique
.NET Microframework: du code, de l&rsquo;électronique, de la robotique
 
#MSDEVMTL Introduction à #SonarQube
#MSDEVMTL Introduction à #SonarQube#MSDEVMTL Introduction à #SonarQube
#MSDEVMTL Introduction à #SonarQube
 
Cours 2/3 - Architecture Web
Cours 2/3 - Architecture WebCours 2/3 - Architecture Web
Cours 2/3 - Architecture Web
 
Retours sur java 8 devoxx fr 2016
Retours sur java 8 devoxx fr 2016Retours sur java 8 devoxx fr 2016
Retours sur java 8 devoxx fr 2016
 
Elasticsearch 5.0 les nouveautés
Elasticsearch 5.0 les nouveautésElasticsearch 5.0 les nouveautés
Elasticsearch 5.0 les nouveautés
 
Javascript & tools
Javascript & toolsJavascript & tools
Javascript & tools
 
_JCVFr
_JCVFr_JCVFr
_JCVFr
 
Rails 3 au Djangocong
Rails 3 au DjangocongRails 3 au Djangocong
Rails 3 au Djangocong
 
OOP and Design Patterns
OOP and Design PatternsOOP and Design Patterns
OOP and Design Patterns
 
OOP & Design Pattern - Algiers Developers Meetup August 2015
OOP & Design Pattern - Algiers Developers Meetup August 2015OOP & Design Pattern - Algiers Developers Meetup August 2015
OOP & Design Pattern - Algiers Developers Meetup August 2015
 
Développement d'un générateur d'intépréteur de bytecodes pour une JVM embarquée
Développement d'un générateur d'intépréteur de bytecodes pour une JVM embarquéeDéveloppement d'un générateur d'intépréteur de bytecodes pour une JVM embarquée
Développement d'un générateur d'intépréteur de bytecodes pour une JVM embarquée
 
La Rochelle workshop 2016
La Rochelle workshop 2016La Rochelle workshop 2016
La Rochelle workshop 2016
 
Cours Ynov JS B1_1
Cours Ynov JS B1_1Cours Ynov JS B1_1
Cours Ynov JS B1_1
 
Microservices-DDD-Telosys-Devoxx-FR-2022
Microservices-DDD-Telosys-Devoxx-FR-2022Microservices-DDD-Telosys-Devoxx-FR-2022
Microservices-DDD-Telosys-Devoxx-FR-2022
 

Plus de MSDEVMTL

Intro grpc.net
Intro  grpc.netIntro  grpc.net
Intro grpc.netMSDEVMTL
 
Grpc and asp.net partie 2
Grpc and asp.net partie 2Grpc and asp.net partie 2
Grpc and asp.net partie 2MSDEVMTL
 
Property based testing
Property based testingProperty based testing
Property based testingMSDEVMTL
 
Improve cloud visibility and cost in Microsoft Azure
Improve cloud visibility and cost in Microsoft AzureImprove cloud visibility and cost in Microsoft Azure
Improve cloud visibility and cost in Microsoft AzureMSDEVMTL
 
Return on Ignite 2019: Azure, .NET, A.I. & Data
Return on Ignite 2019: Azure, .NET, A.I. & DataReturn on Ignite 2019: Azure, .NET, A.I. & Data
Return on Ignite 2019: Azure, .NET, A.I. & DataMSDEVMTL
 
C sharp 8.0 new features
C sharp 8.0 new featuresC sharp 8.0 new features
C sharp 8.0 new featuresMSDEVMTL
 
Asp.net core 3
Asp.net core 3Asp.net core 3
Asp.net core 3MSDEVMTL
 
MSDEVMTL Informations 2019
MSDEVMTL Informations 2019MSDEVMTL Informations 2019
MSDEVMTL Informations 2019MSDEVMTL
 
Common features in webapi aspnetcore
Common features in webapi aspnetcoreCommon features in webapi aspnetcore
Common features in webapi aspnetcoreMSDEVMTL
 
Groupe Excel et Power BI - Rencontre du 25 septembre 2018
Groupe Excel et Power BI  - Rencontre du 25 septembre 2018Groupe Excel et Power BI  - Rencontre du 25 septembre 2018
Groupe Excel et Power BI - Rencontre du 25 septembre 2018MSDEVMTL
 
Api gateway
Api gatewayApi gateway
Api gatewayMSDEVMTL
 
Common features in webapi aspnetcore
Common features in webapi aspnetcoreCommon features in webapi aspnetcore
Common features in webapi aspnetcoreMSDEVMTL
 
Stephane Lapointe: Governance in Azure, keep control of your environments
Stephane Lapointe: Governance in Azure, keep control of your environmentsStephane Lapointe: Governance in Azure, keep control of your environments
Stephane Lapointe: Governance in Azure, keep control of your environmentsMSDEVMTL
 
Eric Routhier: Garder le contrôle sur vos coûts Azure
Eric Routhier: Garder le contrôle sur vos coûts AzureEric Routhier: Garder le contrôle sur vos coûts Azure
Eric Routhier: Garder le contrôle sur vos coûts AzureMSDEVMTL
 
Data science presentation
Data science presentationData science presentation
Data science presentationMSDEVMTL
 
Michel Ouellette + Gabriel Lainesse: Process Automation & Data Analytics at S...
Michel Ouellette + Gabriel Lainesse: Process Automation & Data Analytics at S...Michel Ouellette + Gabriel Lainesse: Process Automation & Data Analytics at S...
Michel Ouellette + Gabriel Lainesse: Process Automation & Data Analytics at S...MSDEVMTL
 
Open id connect, azure ad, angular 5, web api core
Open id connect, azure ad, angular 5, web api coreOpen id connect, azure ad, angular 5, web api core
Open id connect, azure ad, angular 5, web api coreMSDEVMTL
 
Yoann Clombe : Fail fast, iterate quickly with power bi and google analytics
Yoann Clombe : Fail fast, iterate quickly with power bi and google analyticsYoann Clombe : Fail fast, iterate quickly with power bi and google analytics
Yoann Clombe : Fail fast, iterate quickly with power bi and google analyticsMSDEVMTL
 
CAE: etude de cas - Rolling Average
CAE: etude de cas - Rolling AverageCAE: etude de cas - Rolling Average
CAE: etude de cas - Rolling AverageMSDEVMTL
 
CAE: etude de cas
CAE: etude de casCAE: etude de cas
CAE: etude de casMSDEVMTL
 

Plus de MSDEVMTL (20)

Intro grpc.net
Intro  grpc.netIntro  grpc.net
Intro grpc.net
 
Grpc and asp.net partie 2
Grpc and asp.net partie 2Grpc and asp.net partie 2
Grpc and asp.net partie 2
 
Property based testing
Property based testingProperty based testing
Property based testing
 
Improve cloud visibility and cost in Microsoft Azure
Improve cloud visibility and cost in Microsoft AzureImprove cloud visibility and cost in Microsoft Azure
Improve cloud visibility and cost in Microsoft Azure
 
Return on Ignite 2019: Azure, .NET, A.I. & Data
Return on Ignite 2019: Azure, .NET, A.I. & DataReturn on Ignite 2019: Azure, .NET, A.I. & Data
Return on Ignite 2019: Azure, .NET, A.I. & Data
 
C sharp 8.0 new features
C sharp 8.0 new featuresC sharp 8.0 new features
C sharp 8.0 new features
 
Asp.net core 3
Asp.net core 3Asp.net core 3
Asp.net core 3
 
MSDEVMTL Informations 2019
MSDEVMTL Informations 2019MSDEVMTL Informations 2019
MSDEVMTL Informations 2019
 
Common features in webapi aspnetcore
Common features in webapi aspnetcoreCommon features in webapi aspnetcore
Common features in webapi aspnetcore
 
Groupe Excel et Power BI - Rencontre du 25 septembre 2018
Groupe Excel et Power BI  - Rencontre du 25 septembre 2018Groupe Excel et Power BI  - Rencontre du 25 septembre 2018
Groupe Excel et Power BI - Rencontre du 25 septembre 2018
 
Api gateway
Api gatewayApi gateway
Api gateway
 
Common features in webapi aspnetcore
Common features in webapi aspnetcoreCommon features in webapi aspnetcore
Common features in webapi aspnetcore
 
Stephane Lapointe: Governance in Azure, keep control of your environments
Stephane Lapointe: Governance in Azure, keep control of your environmentsStephane Lapointe: Governance in Azure, keep control of your environments
Stephane Lapointe: Governance in Azure, keep control of your environments
 
Eric Routhier: Garder le contrôle sur vos coûts Azure
Eric Routhier: Garder le contrôle sur vos coûts AzureEric Routhier: Garder le contrôle sur vos coûts Azure
Eric Routhier: Garder le contrôle sur vos coûts Azure
 
Data science presentation
Data science presentationData science presentation
Data science presentation
 
Michel Ouellette + Gabriel Lainesse: Process Automation & Data Analytics at S...
Michel Ouellette + Gabriel Lainesse: Process Automation & Data Analytics at S...Michel Ouellette + Gabriel Lainesse: Process Automation & Data Analytics at S...
Michel Ouellette + Gabriel Lainesse: Process Automation & Data Analytics at S...
 
Open id connect, azure ad, angular 5, web api core
Open id connect, azure ad, angular 5, web api coreOpen id connect, azure ad, angular 5, web api core
Open id connect, azure ad, angular 5, web api core
 
Yoann Clombe : Fail fast, iterate quickly with power bi and google analytics
Yoann Clombe : Fail fast, iterate quickly with power bi and google analyticsYoann Clombe : Fail fast, iterate quickly with power bi and google analytics
Yoann Clombe : Fail fast, iterate quickly with power bi and google analytics
 
CAE: etude de cas - Rolling Average
CAE: etude de cas - Rolling AverageCAE: etude de cas - Rolling Average
CAE: etude de cas - Rolling Average
 
CAE: etude de cas
CAE: etude de casCAE: etude de cas
CAE: etude de cas
 

Kevin Avignon: Roslyn - La plateforme de compilation .NET

  • 1. Roslyn: La plateforme de compilation .NET Kevin Avignon
  • 2. AVANT DE COMMENCER LA PRÉSENTATION
  • 3. Qui suis-je ?  Étudiant en génie des technologies de l’information (ÉTS)  Membre de MSDEVMTL depuis Oct. ‘14  Contributeur de la librairie Code Cracker (CC) sur Github  Bloggeur .NET sur le site www.diveintodotnet.com  Participant au Google Summer of Code 2015 avec Mono Project (Xamarin) et la librairie NRefactory  Rédacteur pour le Visual Studio Magazine
  • 4. Plan de la présentation 1. Introduction sur Roslyn 2. Librairies utilisant Roslyn 3. Introduction sur Syntax & Symbol 4. Comment employer le Syntax Visualizer 5. Bâtir son premier analyzer en C# 6. Qu'est-ce qu'un code fix provider 7. Les pièges à éviter en faisant de l'analyse 8. Q&A
  • 6. Les pré-requis • Visual Studio 2015 Ultimate CTP 6 ou Visual Studio 2015 RC • .NET Compiler Platform SDK Templates • .NET Compiler Platform Syntax Visualizer • Soit en NuGet package ou VSIX
  • 7. Qu'est-ce que Roslyn ? • Roslyn est le nom du projet Open source de Microsoft • Beaucoup plus gros qu'un simple API – Compilateur • Compiler as a Service – Scripts – Différentes stacks d'IDE – Analyse sémantique du code
  • 8.  Un CaaS n’est pas comme IaaS ou Paas ou SaaS Considéré comme un service Windows  “Reengineering” du compilateur .NET  Expose differentes phase de la compilation du code Compiler as a Service
  • 9. Une plateforme de compilation • Ensemble d'APIS – Bâtie au-dessus des compilateur C# & VB.NET – Permet l'inspection de code source – Permet la transformation de code source
  • 10. ◦ Ancienne manière dite “black box” ▫ Écriture du code ▫ Écriture de tests ▫ Génération d’assemblies, dlls, etc ▫ Refactor le code selon les besoins du client La vie avant Roslyn
  • 11. ◦ Accès à la dite black box  Information sémantique & syntaxique ◦ Les langages .NET sont en mesure de consommer et générer du code au runtime ◦ Accepter un arbre syntaxique ◦ Générer un arbre syntaxique Une nouvelle vie
  • 13. Diagnostic Analyzer • Analyse du code source – Cible l'erreur indiquée – Envoie un message à l'utilisateur – Se concentre sur différents morceaux du fichier – Fonctionne en compilation-time
  • 15. ◦ CC0001 - Always Use Var Analyzer + refactoring ◦ CC0007 - If Return Always Analyzer + refactoring ◦ CC0008 - Object Initializer analyzer + refactoring Code Cracker (Github)
  • 16. AP1000 - Do not use async in Run method Code analysis for Azure - Microsoft
  • 17.  ConvertToConstant  Variable locale -> const  ConvertIfStatementToConditionalTernaryExpression  (if -> ?:)  ConvertIfStatementToNullCoalescingExpression  (if -> ??)  ForCanBeConvertedToForeach  (for -foreach) NRefactory - Mono Project
  • 18. 3. Introduction sur Syntax & Symbol
  • 19. ◦ Représentation syntaxique du code (.NET)  Produit par le compilateur ◦ Construit par divers éléments  Syntax nodes  Syntax tokens  Syntax trivia L’arbre syntaxique
  • 20. ◦ Nodes (noeuds): Élements principaux de l’arbre syntaxique  Représente une multitude de construction syntaxique ObjectCreationExpressionSyntax, InvocationExpressionSyntax,etc  token et trivia dépendent du noeud courant  Ne dépendent pas d’un langage spécifique Syntax Node - I
  • 21. o Se définit avec un span de character  TextSpan : [Début, Longueur]  Ne prend pas en compte le trivia o Un noeud a connaissance de ces enfants & descendants  IEnumerable<SyntaxNode> Syntax Node - II
  • 22.  Syntax Token – Représente des petits fragments de code – Keywords (int, lock, abstract) – Identifiants (noms de variables • Syntax Trivia – Représente le trivia dans l'arbre syntaxique • End of line trivia • Whitespace trivia Syntax Tokens & Syntax Trivia
  • 23. ISymbol & ITypeSymbol • ISymbol – Représentation dans l'arbre syntaxique • namespace, classe, struct – Information sur les noeuds exposée par le compilateur – Permet de valider le type d'un noeud • ITypeSymbol – Représentation de l'information d'implémentation – Accès aux bases type d'un noeud – Accès aux interfaces implémentées par un noeud
  • 24. 4. Comment employer le Syntax Visualizer
  • 25. ◦ Il faut beaucoup d’éléments pour initialiser un objet ▫ VariableDeclarationSyntax ▫ LocalVariableDeclarationSyntax ▫ EqualsClauseSyntax ▫ ObjectCreationExpressionSyntax ▫ Possiblement AnonymousExpressionSyntax L'initialisation d'un objet
  • 26. Valider le type d’une syntaxe (démo)
  • 27. 5. Bâtir son premier analyzer en C#
  • 28. o Node: SyntaxNode  Noued (s) spécifié dans l’analyse o Semantic Model: SemanticModel  Garde en mémoire (cache) les symbols locaux  Résolver un symbol en runtime  Information sémantique concernant les noeuds dans l’arbre o ReportDiagnostic: Action<Diagnostic>  DiagnosticDescriptor  Rule  Location SyntaxNodeAnalysisContext struct
  • 29. Always Use Var Diagnostic Analyzer (démo)
  • 30. 6. Qu'est-ce qu'un code fix provider ?
  • 31. o Les raisons pour implémenter cet analyzer  Améliore la lisibilité  Rend le code plus uniforme  Assez facile à implémenter o Fonctionnement 1. Rechercher tous les local variables 2. Valider celles de type “var” 3. Envoyer une erreur si jamais != var Always use var for local variables
  • 32. Code fix provider Exploite le Diagnostic Analyzer Refactor le “mauvais” code Manière rapide de corriger une erreur Donne une bonne estimation de la marche à suivre Nécéssite de manipuler l’arbre syntaxique • Ajout d'un syntax node • Délétion d'un syntax node • modification d’un syntax node
  • 33. Always Use Var Code Fix Provider (démo)
  • 34. 7. Les pièges à éviter en faisant de l’analyse
  • 35.  Lorsqu’il s’agit d’une declaration o GetDeclaredSymbol <- SemanticModel  Classe  Enum  Variable (locale, champs, propriété, anonyme)  Interface  Struct  Sinon  GetSymbolInfo <- SemanticModel Résolver un symbol
  • 36.  Outil très puissant  Valide rapidement ce qui faut o Symbol o SyntaxNode o Trivia o Token Ne pas employer Syntax Visualizer
  • 37. ◦ Préférable de développer en TDD ◦ Tenter de penser aux edge cases ▫ Les plus susceptibles de briser votre logique ◦ Réduction du temps en QA Ne pas faire de unit tests (TDD)
  • 38. ◦ À utiliser dans de rares circonstances ▫ MetadataName ▫ typeof ▫ Retrouver l'objet TypeInfo avec SemanticModel.GetTypeInfo() ◦ Effet sur la performance de l’analyzer ▫ Retraverse l’arbre à chaque invocation pour créer un string ▫ Ne place aucune information en cache. Employer la méthode ToDisplayString()
  • 39. ◦ Les patrons GoF peuvent procurer de bonnes façons de refactorer le code ▫ Stratégie ▫ Template ▫ Visiteur  Walker Se refamiliariser avec GoF
  • 40. 8. Q & A
  • 41. 1. https://github.com/dotnet/roslyn 2. http://www.infoworld.com/article/2621132/microsoft-net/microsoft-s-roslyn--reinventing-the-compiler-as-we- know-it.html 3. http://www.i-programmer.info/professional-programmer/i-programmer/7154-c-guru-an-interview-with-eric- lippert.html 4. http://davefancher.com/2014/11/12/i-can-analyze-code-and-so-can-you/ 5. http://www.dreamincode.net/forums/blog/217/entry-4754-wrote-my-first-roslyn-diagnostic-and-code-fix-today/ (VB.NET Analyzer + Code Fix) 6. http://blog.jetbrains.com/dotnet/2014/04/10/resharper-and-roslyn-qa/ 7. https://channel9.msdn.com/Events/TechDays/Techdays-2012-the-Netherlands/2293 8. https://channel9.msdn.com/coding4fun/blog/The-future-of-NET-today-The-NET-Compiler-Platform 9. https://msdn.microsoft.com/en-us/magazine/dn904670.aspx Sources