SlideShare une entreprise Scribd logo
1  sur  30
Télécharger pour lire hors ligne
Méta-programmation

                           Matthieu MEZIL
         Consultant, C# MVP, INETA Speaker
                             Infinite Square
                                       @MatthieuMEZIL
                       http://msmvps.com/blogs/matthieu



Code / Développement
INFINITE SQUARE
  STAND 44 ESPACE WINDOWS 8 & EXPÉRIENCES NUMÉRIQUES

   Société de conseil, d’expertise, de réalisation et de formation exclusivement sur les technologies
    de développement d’applications et la plateforme applicative Microsoft.

   30 collaborateurs spécialisés sur les techno MS, dont 10 MVP.




   GOLD Certified Partner
    sur 4 domaines de compétences.
   Agréé CIR.
   Centre de formation agréé.
Infinite Square aux TechDays 2013
Définition
     • "Metaprogramming is the writing of
       computer programs that write or
       manipulate other programs (or themselves)
       as their data, or that do part of the work at
       compile time that would otherwise be done
       at runtime." Wikipedia


Code / Développement
De quoi disposons nous ?
     • Génération de code
          – Pré-compilation
             • T4, Razor, NuGet
          – A la compilation
             • Roslyn
          – Post compilation
             • Mono.Cecil
          – Au runtime
             • Expressions LINQ, CodeDOM, Reflection.Emit
Code / Développement
De quoi disposons nous ?
     • Analyse de code
          – Analyse statique
             • Roslyn
          – Au runtime
             • Reflection, Expressions LINQ




Code / Développement
Qu’allons-nous voir aujourd’hui ?
     • Génération pre-compilation
          – T4
          – NuGet
          – Roslyn (via T4 ou NuGet)




Code / Développement
Pourquoi faire ?
     • Augmenter la productivité des
       développeurs
          – Eviter le code « rébarbatif »
          – Se concentrer sur ce qui a de la valeur pour l’utilisateur
     • Améliorer le travail en équipe
          – Rendre plus accessible des architectures complexes à
            des développeurs débutants !


Code / Développement
Comment faire ?
     • Générer du code redondant
          – Au projet (ex : application orientée données)
          – A différents projets avec le même type d’architecture
            (notion de méta-Framework)




Code / Développement
Une vieille idée qui ne s’est jamais imposée
     • La méta-programmation existe depuis presque
       aussi longtemps que la programmation …
     • … mais reste très peu utilisée :
          – Un outillage insuffisant
          – Une flexibilité insuffisante
          – Difficile de répondre de manière optimale à tous les cas de
            façon générique
          – Défiance de la part des développeurs
              • Crainte : Où est ma valeur ajoutée ?
              • Orgueil : Mon code est forcément mieux !

Code / Développement
Pourquoi ça changerait ?
     • Un outillage qui progresse
     • Une flexibilité rendue possible
          – partial class
          – partial method
     • Difficile de répondre de manière optimale à
       tous les cas de façon générique… mais on
       peut s’en approcher
Code / Développement
Les choses sont en train de changer
     • T4 et NuGet sont de plus en plus utilisés,
       notamment par Microsoft




Code / Développement
T4

Design
T4
     • Apparu en 2005
     • Continue d’évoluer
          – Ex : ajout du debugging dans la version 2012
     • A pris son essor en 2009 avec Entity
       Framework notamment
     • Egalement utilisé avec ASP.NET MVC

Code / Développement
T4
     • Metacode utilisant des balises
          – <#@ … #> : utilisé pour définir les métadatas du template
               •   Le langage utilisé pour l’écriture du template
               •   L’extension du fichier « principal »
               •   Les includes
               •   Les imports
               •   …
          – <# … #> : utilisé pour le metacode
          – <#= … #> : utilisé pour écrire dans le fichier résultat la valeur de
            l’expression calculée à l’intérieur de la balise
          – <#+ … #> : utilisé à la fin du template pour définir des méthodes
            qui seront utilisables dans le metacode
     •   Tout ce qui n’est pas entre balise est écrit dans le fichier résultat

Code / Développement
Exemple de T4


                       using System;

                       namespace MyNS
                       {
                           public class MyClass
                           {
                               public void Foo()
                               {
                                   Console.WriteLine("azerty");
                                   Console.WriteLine("qwerty");
                               }
                           }
                       }

Code / Développement
T4
     • Possibilité de factoriser en utilisant des
       fichiers .ttinclude
          – Afin de factoriser des méthodes utilisées dans plusieurs
            T4
          – Afin de partager du code entre plusieurs projets
            (notion de meta-framework)
             • Les T4 (intégrés dans le projet) se réduise à des
               appels vers des méthodes définies dans des
               ttinclude externes au projet et à l’écriture de meta-
               code spécifique au projet
Code / Développement
Exemple de T4

                       foo.ttinclude




                                       foo.tt

Code / Développement
T4 - DEMO

Design
NUGET

Design
NuGet
     • Depuis fin 2010
     • Massivement utilisé par Microsoft
          – Jquery, Entity Framework, Json.NET, Razor, Rx,
            AjaxControlToolkit, WIF, SQLite, Prism, MEF, ASP.NET MVC,
            ASP.NET Web API, Unity, TPL Dataflow, WCF Data Services, …
     • Plus de 10 000 packages dans la NuGet gallery
     • Contexte d’utilisation
          – Public
          – Privée
Code / Développement
NuGet
     • Outil permettant de modifier un projet
          – Ajout de dll avec possibilité de cibler la version du
            framework
              • Possibilité de faire des packages intégrant le code
                source et les pdb
          – Ajout de code
          – Ajout dans les fichiers de config
          – Beaucoup plus en utilisant les commandes powershell

Code / Développement
NUGET - DEMO

Design
ROSLYN

Design
Roslyn
     • Est apparu en CTP fin 2011
     • Toujours en CTP (v1.2)
     • Investissement important de la part de
       Microsoft
     • Vision à long terme


Code / Développement
Roslyn
     • Permet de développer des add-ins VS
     • Permet de générer du code
     • Permet d’analyser du code (syntaxiquement
       et sémantiquement)
     • En général, la génération de code se base
       sur un modèle. En intégrant Roslyn, ce
       modèle peut être du code !
Code / Développement
ROSLYN - DEMO

Design
Conclusion
     • La méta-programmation n’est pas adaptée à tous
       les projets
     • La productivité des développeurs peut « exploser »
       quand le projet se prête massivement à la méta-
       programmation
     • La méta-programmation a beaucoup évolué (dans
       l’environnement VS) ces dernières années
     • Le risque de bug est réduit quand le méta-code est
       éprouvé
     • Le code écrit par le développeur peut être simplifié
Code / Développement
Démo de WAQS
     • Stand Infinite Square (44 Espace Windows 8
       & expériences numériques)




Code / Développement
Donnez votre avis !
                   Depuis votre smartphone, sur :
                     http://notes.mstechdays.fr

   De nombreux lots à gagner toutes les heures !!!
              Claviers, souris et jeux Microsoft…

       Merci de nous aider à améliorer les TechDays

http://notes.mstechdays.fr
Développeurs                                                         Pros de l’IT
http://aka.ms/generation-app        Formez-vous en ligne        www.microsoftvirtualacademy.com

    http://aka.ms/evenements-
                 developpeurs     Retrouvez nos évènements      http://aka.ms/itcamps-france


            Les accélérateurs
                                  Faites-vous accompagner
Windows Azure, Windows Phone,
                                  gratuitement
                   Windows 8


                                   Essayer gratuitement nos     http://aka.ms/telechargements
                                                 solutions IT

         La Dev’Team sur MSDN       Retrouver nos experts       L’IT Team sur TechNet
          http://aka.ms/devteam           Microsoft             http://aka.ms/itteam

Contenu connexe

En vedette

MDA for Cross-Platform Mobile Development
MDA for Cross-Platform Mobile DevelopmentMDA for Cross-Platform Mobile Development
MDA for Cross-Platform Mobile DevelopmentSalma ES-Salmani
 
Comparaison de outils mda
Comparaison de outils mdaComparaison de outils mda
Comparaison de outils mdaShili Mohamed
 
IDM : Vision Globale - Introduction -- 9
IDM : Vision Globale - Introduction -- 9IDM : Vision Globale - Introduction -- 9
IDM : Vision Globale - Introduction -- 9megaplanet20
 
Le Futur de l'industrialisation du Web: l'ingénierie dirigée par les modèles
Le Futur de l'industrialisation du Web: l'ingénierie dirigée par les modèlesLe Futur de l'industrialisation du Web: l'ingénierie dirigée par les modèles
Le Futur de l'industrialisation du Web: l'ingénierie dirigée par les modèlesAlain Vagner
 
Transformation de carrés en cercles avec Atlas Transformation Language(ATL)
Transformation de carrés en cercles avec Atlas Transformation Language(ATL)Transformation de carrés en cercles avec Atlas Transformation Language(ATL)
Transformation de carrés en cercles avec Atlas Transformation Language(ATL)Amira Hakim
 
Syntaxe concrète des DSL en IDM [avec Xtext]
Syntaxe concrète des DSL en IDM [avec Xtext]Syntaxe concrète des DSL en IDM [avec Xtext]
Syntaxe concrète des DSL en IDM [avec Xtext]Olivier Le Goaër
 
La gestion de la donnée avec Eclipse et l'Ingénierie dirigée par les Modèles ...
La gestion de la donnée avec Eclipse et l'Ingénierie dirigée par les Modèles ...La gestion de la donnée avec Eclipse et l'Ingénierie dirigée par les Modèles ...
La gestion de la donnée avec Eclipse et l'Ingénierie dirigée par les Modèles ...EclipseDayParis
 
Ingénierie Dirigée par les Modèles
Ingénierie Dirigée par les ModèlesIngénierie Dirigée par les Modèles
Ingénierie Dirigée par les ModèlesMarc Daumas
 

En vedette (10)

MDA for Cross-Platform Mobile Development
MDA for Cross-Platform Mobile DevelopmentMDA for Cross-Platform Mobile Development
MDA for Cross-Platform Mobile Development
 
Comparaison de outils mda
Comparaison de outils mdaComparaison de outils mda
Comparaison de outils mda
 
Builsing DSL using MDE
Builsing DSL using MDEBuilsing DSL using MDE
Builsing DSL using MDE
 
IDM : Vision Globale - Introduction -- 9
IDM : Vision Globale - Introduction -- 9IDM : Vision Globale - Introduction -- 9
IDM : Vision Globale - Introduction -- 9
 
Le Futur de l'industrialisation du Web: l'ingénierie dirigée par les modèles
Le Futur de l'industrialisation du Web: l'ingénierie dirigée par les modèlesLe Futur de l'industrialisation du Web: l'ingénierie dirigée par les modèles
Le Futur de l'industrialisation du Web: l'ingénierie dirigée par les modèles
 
Transformation de carrés en cercles avec Atlas Transformation Language(ATL)
Transformation de carrés en cercles avec Atlas Transformation Language(ATL)Transformation de carrés en cercles avec Atlas Transformation Language(ATL)
Transformation de carrés en cercles avec Atlas Transformation Language(ATL)
 
Syntaxe concrète des DSL en IDM [avec Xtext]
Syntaxe concrète des DSL en IDM [avec Xtext]Syntaxe concrète des DSL en IDM [avec Xtext]
Syntaxe concrète des DSL en IDM [avec Xtext]
 
La gestion de la donnée avec Eclipse et l'Ingénierie dirigée par les Modèles ...
La gestion de la donnée avec Eclipse et l'Ingénierie dirigée par les Modèles ...La gestion de la donnée avec Eclipse et l'Ingénierie dirigée par les Modèles ...
La gestion de la donnée avec Eclipse et l'Ingénierie dirigée par les Modèles ...
 
Ingénierie Dirigée par les Modèles
Ingénierie Dirigée par les ModèlesIngénierie Dirigée par les Modèles
Ingénierie Dirigée par les Modèles
 
Diapo PFE
Diapo PFEDiapo PFE
Diapo PFE
 

Similaire à La Meta-programmation

Fichier, Nouveau projet… Et après ?
Fichier, Nouveau projet… Et après ?Fichier, Nouveau projet… Et après ?
Fichier, Nouveau projet… Et après ?Microsoft
 
[Scrum Day 2011] Outillage Agile dans un environnement Microsoft
[Scrum Day 2011] Outillage Agile dans un environnement Microsoft[Scrum Day 2011] Outillage Agile dans un environnement Microsoft
[Scrum Day 2011] Outillage Agile dans un environnement MicrosoftChristophe HERAL
 
Agile Tour Paris 2014 : Ma stack d'outils Agiles, tout un programme !, Cedric...
Agile Tour Paris 2014 : Ma stack d'outils Agiles, tout un programme !, Cedric...Agile Tour Paris 2014 : Ma stack d'outils Agiles, tout un programme !, Cedric...
Agile Tour Paris 2014 : Ma stack d'outils Agiles, tout un programme !, Cedric...ENSIBS
 
Portable Class Library et Nuget : Le Combo gagnant
Portable Class Library et Nuget : Le Combo gagnantPortable Class Library et Nuget : Le Combo gagnant
Portable Class Library et Nuget : Le Combo gagnantMicrosoft
 
Réutilisation de code entre windows 8 et windows phone 8
Réutilisation de code entre windows 8 et windows phone 8Réutilisation de code entre windows 8 et windows phone 8
Réutilisation de code entre windows 8 et windows phone 8Arnaud Auroux
 
20131024 qualité de code et sonar - mug lyon
20131024   qualité de code et sonar - mug lyon20131024   qualité de code et sonar - mug lyon
20131024 qualité de code et sonar - mug lyonClement Bouillier
 
Presentation mkframework software craftsmanship a l'afup
Presentation mkframework software craftsmanship a l'afupPresentation mkframework software craftsmanship a l'afup
Presentation mkframework software craftsmanship a l'afupMichael Bertocchi
 
Optimisation des applications Windows 8/HTML5/WinJS
Optimisation des applications Windows 8/HTML5/WinJSOptimisation des applications Windows 8/HTML5/WinJS
Optimisation des applications Windows 8/HTML5/WinJSMicrosoft
 
Drupagora 2013 : Drupal8 et Symfony2, quel impact ?
Drupagora 2013 : Drupal8 et Symfony2, quel impact ?Drupagora 2013 : Drupal8 et Symfony2, quel impact ?
Drupagora 2013 : Drupal8 et Symfony2, quel impact ?ekino
 
Mockito - Design + tests par Brice Duteil
Mockito - Design + tests par Brice DuteilMockito - Design + tests par Brice Duteil
Mockito - Design + tests par Brice DuteilNormandy JUG
 
Introduction à DevOps
Introduction à DevOpsIntroduction à DevOps
Introduction à DevOpsMicrosoft
 
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
 
Embarquer une base de données locale dans vos logiciels et applications mobiles
Embarquer une base de données locale dans vos logiciels et applications mobilesEmbarquer une base de données locale dans vos logiciels et applications mobiles
Embarquer une base de données locale dans vos logiciels et applications mobilespprem
 
10 tips pour améliorer les performances de vos applications Windows 8
10 tips pour améliorer les performances de vos applications Windows 810 tips pour améliorer les performances de vos applications Windows 8
10 tips pour améliorer les performances de vos applications Windows 8Microsoft
 
[Figma Tokens pour un handoff effectif] FoFCotonou event.pptx
[Figma Tokens pour un handoff effectif] FoFCotonou event.pptx[Figma Tokens pour un handoff effectif] FoFCotonou event.pptx
[Figma Tokens pour un handoff effectif] FoFCotonou event.pptxFriends Of Figma, Cotonou
 
Captronic grenoble 01102014 version presentee
Captronic grenoble 01102014 version presenteeCaptronic grenoble 01102014 version presentee
Captronic grenoble 01102014 version presenteePatrick MOREAU
 
Accéder au développement Dot.Net et Asp.Net
Accéder au développement Dot.Net et Asp.NetAccéder au développement Dot.Net et Asp.Net
Accéder au développement Dot.Net et Asp.NetFrédéric Vandenbriele
 
Python dans le cloud avec Windows Azure
Python dans le cloud avec Windows AzurePython dans le cloud avec Windows Azure
Python dans le cloud avec Windows AzureMicrosoft
 
Comment développer pour Linux avec Delphi
Comment développer pour Linux avec DelphiComment développer pour Linux avec Delphi
Comment développer pour Linux avec Delphipprem
 

Similaire à La Meta-programmation (20)

Fichier, Nouveau projet… Et après ?
Fichier, Nouveau projet… Et après ?Fichier, Nouveau projet… Et après ?
Fichier, Nouveau projet… Et après ?
 
[Scrum Day 2011] Outillage Agile dans un environnement Microsoft
[Scrum Day 2011] Outillage Agile dans un environnement Microsoft[Scrum Day 2011] Outillage Agile dans un environnement Microsoft
[Scrum Day 2011] Outillage Agile dans un environnement Microsoft
 
Agile Tour Paris 2014 : Ma stack d'outils Agiles, tout un programme !, Cedric...
Agile Tour Paris 2014 : Ma stack d'outils Agiles, tout un programme !, Cedric...Agile Tour Paris 2014 : Ma stack d'outils Agiles, tout un programme !, Cedric...
Agile Tour Paris 2014 : Ma stack d'outils Agiles, tout un programme !, Cedric...
 
Portable Class Library et Nuget : Le Combo gagnant
Portable Class Library et Nuget : Le Combo gagnantPortable Class Library et Nuget : Le Combo gagnant
Portable Class Library et Nuget : Le Combo gagnant
 
Réutilisation de code entre windows 8 et windows phone 8
Réutilisation de code entre windows 8 et windows phone 8Réutilisation de code entre windows 8 et windows phone 8
Réutilisation de code entre windows 8 et windows phone 8
 
20131024 qualité de code et sonar - mug lyon
20131024   qualité de code et sonar - mug lyon20131024   qualité de code et sonar - mug lyon
20131024 qualité de code et sonar - mug lyon
 
Presentation mkframework software craftsmanship a l'afup
Presentation mkframework software craftsmanship a l'afupPresentation mkframework software craftsmanship a l'afup
Presentation mkframework software craftsmanship a l'afup
 
Optimisation des applications Windows 8/HTML5/WinJS
Optimisation des applications Windows 8/HTML5/WinJSOptimisation des applications Windows 8/HTML5/WinJS
Optimisation des applications Windows 8/HTML5/WinJS
 
Drupagora 2013 : Drupal8 et Symfony2, quel impact ?
Drupagora 2013 : Drupal8 et Symfony2, quel impact ?Drupagora 2013 : Drupal8 et Symfony2, quel impact ?
Drupagora 2013 : Drupal8 et Symfony2, quel impact ?
 
Mockito - Design + tests par Brice Duteil
Mockito - Design + tests par Brice DuteilMockito - Design + tests par Brice Duteil
Mockito - Design + tests par Brice Duteil
 
Introduction à DevOps
Introduction à DevOpsIntroduction à DevOps
Introduction à DevOps
 
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...
 
Embarquer une base de données locale dans vos logiciels et applications mobiles
Embarquer une base de données locale dans vos logiciels et applications mobilesEmbarquer une base de données locale dans vos logiciels et applications mobiles
Embarquer une base de données locale dans vos logiciels et applications mobiles
 
10 tips pour améliorer les performances de vos applications Windows 8
10 tips pour améliorer les performances de vos applications Windows 810 tips pour améliorer les performances de vos applications Windows 8
10 tips pour améliorer les performances de vos applications Windows 8
 
[Figma Tokens pour un handoff effectif] FoFCotonou event.pptx
[Figma Tokens pour un handoff effectif] FoFCotonou event.pptx[Figma Tokens pour un handoff effectif] FoFCotonou event.pptx
[Figma Tokens pour un handoff effectif] FoFCotonou event.pptx
 
Captronic grenoble 01102014 version presentee
Captronic grenoble 01102014 version presenteeCaptronic grenoble 01102014 version presentee
Captronic grenoble 01102014 version presentee
 
Tizen sdk-solutionslinux-20130529
Tizen sdk-solutionslinux-20130529Tizen sdk-solutionslinux-20130529
Tizen sdk-solutionslinux-20130529
 
Accéder au développement Dot.Net et Asp.Net
Accéder au développement Dot.Net et Asp.NetAccéder au développement Dot.Net et Asp.Net
Accéder au développement Dot.Net et Asp.Net
 
Python dans le cloud avec Windows Azure
Python dans le cloud avec Windows AzurePython dans le cloud avec Windows Azure
Python dans le cloud avec Windows Azure
 
Comment développer pour Linux avec Delphi
Comment développer pour Linux avec DelphiComment développer pour Linux avec Delphi
Comment développer pour Linux avec Delphi
 

Plus de Microsoft

Uwp + Xamarin : Du nouveau en terre du milieu
Uwp + Xamarin : Du nouveau en terre du milieuUwp + Xamarin : Du nouveau en terre du milieu
Uwp + Xamarin : Du nouveau en terre du milieuMicrosoft
 
La Blockchain pas à PaaS
La Blockchain pas à PaaSLa Blockchain pas à PaaS
La Blockchain pas à PaaSMicrosoft
 
Tester, Monitorer et Déployer son application mobile
Tester, Monitorer et Déployer son application mobileTester, Monitorer et Déployer son application mobile
Tester, Monitorer et Déployer son application mobileMicrosoft
 
Windows 10, un an après – Nouveautés & Démo
Windows 10, un an après – Nouveautés & Démo Windows 10, un an après – Nouveautés & Démo
Windows 10, un an après – Nouveautés & Démo Microsoft
 
Prenez votre pied avec les bots et cognitive services.
Prenez votre pied avec les bots et cognitive services.Prenez votre pied avec les bots et cognitive services.
Prenez votre pied avec les bots et cognitive services.Microsoft
 
Office 365 Dev PnP & PowerShell : exploitez enfin le potentiel de votre écosy...
Office 365 Dev PnP & PowerShell : exploitez enfin le potentiel de votre écosy...Office 365 Dev PnP & PowerShell : exploitez enfin le potentiel de votre écosy...
Office 365 Dev PnP & PowerShell : exploitez enfin le potentiel de votre écosy...Microsoft
 
Créer un bot de A à Z
Créer un bot de A à ZCréer un bot de A à Z
Créer un bot de A à ZMicrosoft
 
Microsoft Composition, pierre angulaire de vos applications ?
Microsoft Composition, pierre angulaire de vos applications ?Microsoft Composition, pierre angulaire de vos applications ?
Microsoft Composition, pierre angulaire de vos applications ?Microsoft
 
Les nouveautés SQL Server 2016
Les nouveautés SQL Server 2016Les nouveautés SQL Server 2016
Les nouveautés SQL Server 2016Microsoft
 
Conteneurs Linux ou Windows : quelles approches pour des IT agiles ?
Conteneurs Linux ou Windows : quelles approches pour des IT agiles ?Conteneurs Linux ou Windows : quelles approches pour des IT agiles ?
Conteneurs Linux ou Windows : quelles approches pour des IT agiles ?Microsoft
 
Administration et supervision depuis le Cloud avec Azure Logs Analytics
Administration et supervision depuis le Cloud avec Azure Logs AnalyticsAdministration et supervision depuis le Cloud avec Azure Logs Analytics
Administration et supervision depuis le Cloud avec Azure Logs AnalyticsMicrosoft
 
Retour d'expérience de projets Azure IoT "large scale" (MicroServices, portag...
Retour d'expérience de projets Azure IoT "large scale" (MicroServices, portag...Retour d'expérience de projets Azure IoT "large scale" (MicroServices, portag...
Retour d'expérience de projets Azure IoT "large scale" (MicroServices, portag...Microsoft
 
Plan de Reprise d'Activité avec Azure Site Recovery
Plan de Reprise d'Activité avec Azure Site RecoveryPlan de Reprise d'Activité avec Azure Site Recovery
Plan de Reprise d'Activité avec Azure Site RecoveryMicrosoft
 
Modélisation, déploiement et gestion des infrastructures Cloud : outils et bo...
Modélisation, déploiement et gestion des infrastructures Cloud : outils et bo...Modélisation, déploiement et gestion des infrastructures Cloud : outils et bo...
Modélisation, déploiement et gestion des infrastructures Cloud : outils et bo...Microsoft
 
Transformation de la représentation : De la VR à la RA, aller & retour.
Transformation de la représentation : De la VR à la RA, aller & retour.Transformation de la représentation : De la VR à la RA, aller & retour.
Transformation de la représentation : De la VR à la RA, aller & retour.Microsoft
 
Quelles architectures pour vos applications Cloud, de la VM au conteneur : ça...
Quelles architectures pour vos applications Cloud, de la VM au conteneur : ça...Quelles architectures pour vos applications Cloud, de la VM au conteneur : ça...
Quelles architectures pour vos applications Cloud, de la VM au conteneur : ça...Microsoft
 
Introduction à ASP.NET Core
Introduction à ASP.NET CoreIntroduction à ASP.NET Core
Introduction à ASP.NET CoreMicrosoft
 
Open Source et Microsoft Azure, rêve ou réalité ?
Open Source et Microsoft Azure, rêve ou réalité ?Open Source et Microsoft Azure, rêve ou réalité ?
Open Source et Microsoft Azure, rêve ou réalité ?Microsoft
 
Comment développer sur la console Xbox One avec une application Universal Win...
Comment développer sur la console Xbox One avec une application Universal Win...Comment développer sur la console Xbox One avec une application Universal Win...
Comment développer sur la console Xbox One avec une application Universal Win...Microsoft
 
Azure Service Fabric pour les développeurs
Azure Service Fabric pour les développeursAzure Service Fabric pour les développeurs
Azure Service Fabric pour les développeursMicrosoft
 

Plus de Microsoft (20)

Uwp + Xamarin : Du nouveau en terre du milieu
Uwp + Xamarin : Du nouveau en terre du milieuUwp + Xamarin : Du nouveau en terre du milieu
Uwp + Xamarin : Du nouveau en terre du milieu
 
La Blockchain pas à PaaS
La Blockchain pas à PaaSLa Blockchain pas à PaaS
La Blockchain pas à PaaS
 
Tester, Monitorer et Déployer son application mobile
Tester, Monitorer et Déployer son application mobileTester, Monitorer et Déployer son application mobile
Tester, Monitorer et Déployer son application mobile
 
Windows 10, un an après – Nouveautés & Démo
Windows 10, un an après – Nouveautés & Démo Windows 10, un an après – Nouveautés & Démo
Windows 10, un an après – Nouveautés & Démo
 
Prenez votre pied avec les bots et cognitive services.
Prenez votre pied avec les bots et cognitive services.Prenez votre pied avec les bots et cognitive services.
Prenez votre pied avec les bots et cognitive services.
 
Office 365 Dev PnP & PowerShell : exploitez enfin le potentiel de votre écosy...
Office 365 Dev PnP & PowerShell : exploitez enfin le potentiel de votre écosy...Office 365 Dev PnP & PowerShell : exploitez enfin le potentiel de votre écosy...
Office 365 Dev PnP & PowerShell : exploitez enfin le potentiel de votre écosy...
 
Créer un bot de A à Z
Créer un bot de A à ZCréer un bot de A à Z
Créer un bot de A à Z
 
Microsoft Composition, pierre angulaire de vos applications ?
Microsoft Composition, pierre angulaire de vos applications ?Microsoft Composition, pierre angulaire de vos applications ?
Microsoft Composition, pierre angulaire de vos applications ?
 
Les nouveautés SQL Server 2016
Les nouveautés SQL Server 2016Les nouveautés SQL Server 2016
Les nouveautés SQL Server 2016
 
Conteneurs Linux ou Windows : quelles approches pour des IT agiles ?
Conteneurs Linux ou Windows : quelles approches pour des IT agiles ?Conteneurs Linux ou Windows : quelles approches pour des IT agiles ?
Conteneurs Linux ou Windows : quelles approches pour des IT agiles ?
 
Administration et supervision depuis le Cloud avec Azure Logs Analytics
Administration et supervision depuis le Cloud avec Azure Logs AnalyticsAdministration et supervision depuis le Cloud avec Azure Logs Analytics
Administration et supervision depuis le Cloud avec Azure Logs Analytics
 
Retour d'expérience de projets Azure IoT "large scale" (MicroServices, portag...
Retour d'expérience de projets Azure IoT "large scale" (MicroServices, portag...Retour d'expérience de projets Azure IoT "large scale" (MicroServices, portag...
Retour d'expérience de projets Azure IoT "large scale" (MicroServices, portag...
 
Plan de Reprise d'Activité avec Azure Site Recovery
Plan de Reprise d'Activité avec Azure Site RecoveryPlan de Reprise d'Activité avec Azure Site Recovery
Plan de Reprise d'Activité avec Azure Site Recovery
 
Modélisation, déploiement et gestion des infrastructures Cloud : outils et bo...
Modélisation, déploiement et gestion des infrastructures Cloud : outils et bo...Modélisation, déploiement et gestion des infrastructures Cloud : outils et bo...
Modélisation, déploiement et gestion des infrastructures Cloud : outils et bo...
 
Transformation de la représentation : De la VR à la RA, aller & retour.
Transformation de la représentation : De la VR à la RA, aller & retour.Transformation de la représentation : De la VR à la RA, aller & retour.
Transformation de la représentation : De la VR à la RA, aller & retour.
 
Quelles architectures pour vos applications Cloud, de la VM au conteneur : ça...
Quelles architectures pour vos applications Cloud, de la VM au conteneur : ça...Quelles architectures pour vos applications Cloud, de la VM au conteneur : ça...
Quelles architectures pour vos applications Cloud, de la VM au conteneur : ça...
 
Introduction à ASP.NET Core
Introduction à ASP.NET CoreIntroduction à ASP.NET Core
Introduction à ASP.NET Core
 
Open Source et Microsoft Azure, rêve ou réalité ?
Open Source et Microsoft Azure, rêve ou réalité ?Open Source et Microsoft Azure, rêve ou réalité ?
Open Source et Microsoft Azure, rêve ou réalité ?
 
Comment développer sur la console Xbox One avec une application Universal Win...
Comment développer sur la console Xbox One avec une application Universal Win...Comment développer sur la console Xbox One avec une application Universal Win...
Comment développer sur la console Xbox One avec une application Universal Win...
 
Azure Service Fabric pour les développeurs
Azure Service Fabric pour les développeursAzure Service Fabric pour les développeurs
Azure Service Fabric pour les développeurs
 

La Meta-programmation

  • 1. Méta-programmation Matthieu MEZIL Consultant, C# MVP, INETA Speaker Infinite Square @MatthieuMEZIL http://msmvps.com/blogs/matthieu Code / Développement
  • 2. INFINITE SQUARE STAND 44 ESPACE WINDOWS 8 & EXPÉRIENCES NUMÉRIQUES  Société de conseil, d’expertise, de réalisation et de formation exclusivement sur les technologies de développement d’applications et la plateforme applicative Microsoft.  30 collaborateurs spécialisés sur les techno MS, dont 10 MVP.  GOLD Certified Partner sur 4 domaines de compétences.  Agréé CIR.  Centre de formation agréé. Infinite Square aux TechDays 2013
  • 3. Définition • "Metaprogramming is the writing of computer programs that write or manipulate other programs (or themselves) as their data, or that do part of the work at compile time that would otherwise be done at runtime." Wikipedia Code / Développement
  • 4. De quoi disposons nous ? • Génération de code – Pré-compilation • T4, Razor, NuGet – A la compilation • Roslyn – Post compilation • Mono.Cecil – Au runtime • Expressions LINQ, CodeDOM, Reflection.Emit Code / Développement
  • 5. De quoi disposons nous ? • Analyse de code – Analyse statique • Roslyn – Au runtime • Reflection, Expressions LINQ Code / Développement
  • 6. Qu’allons-nous voir aujourd’hui ? • Génération pre-compilation – T4 – NuGet – Roslyn (via T4 ou NuGet) Code / Développement
  • 7. Pourquoi faire ? • Augmenter la productivité des développeurs – Eviter le code « rébarbatif » – Se concentrer sur ce qui a de la valeur pour l’utilisateur • Améliorer le travail en équipe – Rendre plus accessible des architectures complexes à des développeurs débutants ! Code / Développement
  • 8. Comment faire ? • Générer du code redondant – Au projet (ex : application orientée données) – A différents projets avec le même type d’architecture (notion de méta-Framework) Code / Développement
  • 9. Une vieille idée qui ne s’est jamais imposée • La méta-programmation existe depuis presque aussi longtemps que la programmation … • … mais reste très peu utilisée : – Un outillage insuffisant – Une flexibilité insuffisante – Difficile de répondre de manière optimale à tous les cas de façon générique – Défiance de la part des développeurs • Crainte : Où est ma valeur ajoutée ? • Orgueil : Mon code est forcément mieux ! Code / Développement
  • 10. Pourquoi ça changerait ? • Un outillage qui progresse • Une flexibilité rendue possible – partial class – partial method • Difficile de répondre de manière optimale à tous les cas de façon générique… mais on peut s’en approcher Code / Développement
  • 11. Les choses sont en train de changer • T4 et NuGet sont de plus en plus utilisés, notamment par Microsoft Code / Développement
  • 13. T4 • Apparu en 2005 • Continue d’évoluer – Ex : ajout du debugging dans la version 2012 • A pris son essor en 2009 avec Entity Framework notamment • Egalement utilisé avec ASP.NET MVC Code / Développement
  • 14. T4 • Metacode utilisant des balises – <#@ … #> : utilisé pour définir les métadatas du template • Le langage utilisé pour l’écriture du template • L’extension du fichier « principal » • Les includes • Les imports • … – <# … #> : utilisé pour le metacode – <#= … #> : utilisé pour écrire dans le fichier résultat la valeur de l’expression calculée à l’intérieur de la balise – <#+ … #> : utilisé à la fin du template pour définir des méthodes qui seront utilisables dans le metacode • Tout ce qui n’est pas entre balise est écrit dans le fichier résultat Code / Développement
  • 15. Exemple de T4 using System; namespace MyNS { public class MyClass { public void Foo() { Console.WriteLine("azerty"); Console.WriteLine("qwerty"); } } } Code / Développement
  • 16. T4 • Possibilité de factoriser en utilisant des fichiers .ttinclude – Afin de factoriser des méthodes utilisées dans plusieurs T4 – Afin de partager du code entre plusieurs projets (notion de meta-framework) • Les T4 (intégrés dans le projet) se réduise à des appels vers des méthodes définies dans des ttinclude externes au projet et à l’écriture de meta- code spécifique au projet Code / Développement
  • 17. Exemple de T4 foo.ttinclude foo.tt Code / Développement
  • 20. NuGet • Depuis fin 2010 • Massivement utilisé par Microsoft – Jquery, Entity Framework, Json.NET, Razor, Rx, AjaxControlToolkit, WIF, SQLite, Prism, MEF, ASP.NET MVC, ASP.NET Web API, Unity, TPL Dataflow, WCF Data Services, … • Plus de 10 000 packages dans la NuGet gallery • Contexte d’utilisation – Public – Privée Code / Développement
  • 21. NuGet • Outil permettant de modifier un projet – Ajout de dll avec possibilité de cibler la version du framework • Possibilité de faire des packages intégrant le code source et les pdb – Ajout de code – Ajout dans les fichiers de config – Beaucoup plus en utilisant les commandes powershell Code / Développement
  • 24. Roslyn • Est apparu en CTP fin 2011 • Toujours en CTP (v1.2) • Investissement important de la part de Microsoft • Vision à long terme Code / Développement
  • 25. Roslyn • Permet de développer des add-ins VS • Permet de générer du code • Permet d’analyser du code (syntaxiquement et sémantiquement) • En général, la génération de code se base sur un modèle. En intégrant Roslyn, ce modèle peut être du code ! Code / Développement
  • 27. Conclusion • La méta-programmation n’est pas adaptée à tous les projets • La productivité des développeurs peut « exploser » quand le projet se prête massivement à la méta- programmation • La méta-programmation a beaucoup évolué (dans l’environnement VS) ces dernières années • Le risque de bug est réduit quand le méta-code est éprouvé • Le code écrit par le développeur peut être simplifié Code / Développement
  • 28. Démo de WAQS • Stand Infinite Square (44 Espace Windows 8 & expériences numériques) Code / Développement
  • 29. Donnez votre avis ! Depuis votre smartphone, sur : http://notes.mstechdays.fr De nombreux lots à gagner toutes les heures !!! Claviers, souris et jeux Microsoft… Merci de nous aider à améliorer les TechDays http://notes.mstechdays.fr
  • 30. Développeurs Pros de l’IT http://aka.ms/generation-app Formez-vous en ligne www.microsoftvirtualacademy.com http://aka.ms/evenements- developpeurs Retrouvez nos évènements http://aka.ms/itcamps-france Les accélérateurs Faites-vous accompagner Windows Azure, Windows Phone, gratuitement Windows 8 Essayer gratuitement nos http://aka.ms/telechargements solutions IT La Dev’Team sur MSDN Retrouver nos experts L’IT Team sur TechNet http://aka.ms/devteam Microsoft http://aka.ms/itteam