Méta-programmation                           Matthieu MEZIL         Consultant, C# MVP, INETA Speaker                     ...
INFINITE SQUARE  STAND 44 ESPACE WINDOWS 8 & EXPÉRIENCES NUMÉRIQUES   Société de conseil, d’expertise, de réalisation et ...
Définition     • "Metaprogramming is the writing of       computer programs that write or       manipulate other programs ...
De quoi disposons nous ?     • Génération de code          – Pré-compilation             • T4, Razor, NuGet          – A l...
De quoi disposons nous ?     • Analyse de code          – Analyse statique             • Roslyn          – Au runtime     ...
Qu’allons-nous voir aujourd’hui ?     • Génération pre-compilation          – T4          – NuGet          – Roslyn (via T...
Pourquoi faire ?     • Augmenter la productivité des       développeurs          – Eviter le code « rébarbatif »          ...
Comment faire ?     • Générer du code redondant          – Au projet (ex : application orientée données)          – A diff...
Une vieille idée qui ne s’est jamais imposée     • La méta-programmation existe depuis presque       aussi longtemps que l...
Pourquoi ça changerait ?     • Un outillage qui progresse     • Une flexibilité rendue possible          – partial class  ...
Les choses sont en train de changer     • T4 et NuGet sont de plus en plus utilisés,       notamment par MicrosoftCode / D...
T4Design
T4     • Apparu en 2005     • Continue d’évoluer          – Ex : ajout du debugging dans la version 2012     • A pris son ...
T4     • Metacode utilisant des balises          – <#@ … #> : utilisé pour définir les métadatas du template              ...
Exemple de T4                       using System;                       namespace MyNS                       {            ...
T4     • Possibilité de factoriser en utilisant des       fichiers .ttinclude          – Afin de factoriser des méthodes u...
Exemple de T4                       foo.ttinclude                                       foo.ttCode / Développement
T4 - DEMODesign
NUGETDesign
NuGet     • Depuis fin 2010     • Massivement utilisé par Microsoft          – Jquery, Entity Framework, Json.NET, Razor, ...
NuGet     • Outil permettant de modifier un projet          – Ajout de dll avec possibilité de cibler la version du       ...
NUGET - DEMODesign
ROSLYNDesign
Roslyn     • Est apparu en CTP fin 2011     • Toujours en CTP (v1.2)     • Investissement important de la part de       Mi...
Roslyn     • Permet de développer des add-ins VS     • Permet de générer du code     • Permet d’analyser du code (syntaxiq...
ROSLYN - DEMODesign
Conclusion     • La méta-programmation n’est pas adaptée à tous       les projets     • La productivité des développeurs p...
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 n...
Développeurs                                                         Pros de l’IThttp://aka.ms/generation-app        Forme...
Prochain SlideShare
Chargement dans…5
×

La Meta-programmation

1 050 vues

Publié le

La génération de code utilisée à bonne escient et un excellent moyen d’augmenter considérablement la productivité des développeurs dans de nombreux scenarii, particulièrement (mais pas uniquement) celui des applications de gestion orientée données. Si cette approche montrait vite ses limites à une époque, les choses ont bien évolué avec les versions récentes de C# ou VB.NET. Microsoft propose différents outils pour générer du code. Nous aborderons les T4 et les NuGet dans le cadre de cette session. En plus de la génération de code, la meta-programmation est englobe également l’analyse du code. Nous parlerons donc de Roslyn, l’API de Microsoft répondant à ce besoin. Dans le cadre de cette session, nous verrons comment la meta-programmation peut réellement révolutionner le travail d’une partie des développeurs, accroître de manière considérable la productivité des développeurs et réduire très fortement le risque sur les projets.

0 commentaire
1 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

Aucun téléchargement
Vues
Nombre de vues
1 050
Sur SlideShare
0
Issues des intégrations
0
Intégrations
73
Actions
Partages
0
Téléchargements
32
Commentaires
0
J’aime
1
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

La Meta-programmation

  1. 1. Méta-programmation Matthieu MEZIL Consultant, C# MVP, INETA Speaker Infinite Square @MatthieuMEZIL http://msmvps.com/blogs/matthieuCode / Développement
  2. 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. 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." WikipediaCode / Développement
  4. 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.EmitCode / Développement
  5. 5. De quoi disposons nous ? • Analyse de code – Analyse statique • Roslyn – Au runtime • Reflection, Expressions LINQCode / Développement
  6. 6. Qu’allons-nous voir aujourd’hui ? • Génération pre-compilation – T4 – NuGet – Roslyn (via T4 ou NuGet)Code / Développement
  7. 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. 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. 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. 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 approcherCode / Développement
  11. 11. Les choses sont en train de changer • T4 et NuGet sont de plus en plus utilisés, notamment par MicrosoftCode / Développement
  12. 12. T4Design
  13. 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 MVCCode / Développement
  14. 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ésultatCode / Développement
  15. 15. Exemple de T4 using System; namespace MyNS { public class MyClass { public void Foo() { Console.WriteLine("azerty"); Console.WriteLine("qwerty"); } } }Code / Développement
  16. 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 projetCode / Développement
  17. 17. Exemple de T4 foo.ttinclude foo.ttCode / Développement
  18. 18. T4 - DEMODesign
  19. 19. NUGETDesign
  20. 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éeCode / Développement
  21. 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 powershellCode / Développement
  22. 22. NUGET - DEMODesign
  23. 23. ROSLYNDesign
  24. 24. Roslyn • Est apparu en CTP fin 2011 • Toujours en CTP (v1.2) • Investissement important de la part de Microsoft • Vision à long termeCode / Développement
  25. 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
  26. 26. ROSLYN - DEMODesign
  27. 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. 28. Démo de WAQS • Stand Infinite Square (44 Espace Windows 8 & expériences numériques)Code / Développement
  29. 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 TechDayshttp://notes.mstechdays.fr
  30. 30. Développeurs Pros de l’IThttp://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 accompagnerWindows 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

×