la meta-programmation
DESCRIPTION
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.TRANSCRIPT
![Page 1: La Meta-programmation](https://reader033.vdocuments.pub/reader033/viewer/2022052209/5596d5621a28ab91098b45cd/html5/thumbnails/1.jpg)
Méta-programmation
Matthieu MEZIL
Consultant, C# MVP, INETA Speaker
Infinite Square
Code / Développement
@MatthieuMEZIL
http://msmvps.com/blogs/matthieu
![Page 2: La Meta-programmation](https://reader033.vdocuments.pub/reader033/viewer/2022052209/5596d5621a28ab91098b45cd/html5/thumbnails/2.jpg)
INFINITE SQUARE STAND 44 ESPACE WINDOWS 8 & EXPÉRIENCES NUMÉRIQUES
GOLD Certified Partner
sur 4 domaines de compétences.
Agréé CIR.
Centre de formation agréé.
Infinite Square aux TechDays 2013
Société de conseil, d’expertise, de réalisation et de formation exclusivement sur les technologiesde développement d’applications et la plateforme applicative Microsoft.
30 collaborateurs spécialisés sur les techno MS, dont 10 MVP.
![Page 3: La Meta-programmation](https://reader033.vdocuments.pub/reader033/viewer/2022052209/5596d5621a28ab91098b45cd/html5/thumbnails/3.jpg)
Code / Développement
• "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
Définition
![Page 4: La Meta-programmation](https://reader033.vdocuments.pub/reader033/viewer/2022052209/5596d5621a28ab91098b45cd/html5/thumbnails/4.jpg)
Code / Développement
• 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
De quoi disposons nous ?
![Page 5: La Meta-programmation](https://reader033.vdocuments.pub/reader033/viewer/2022052209/5596d5621a28ab91098b45cd/html5/thumbnails/5.jpg)
Code / Développement
• Analyse de code– Analyse statique
• Roslyn
– Au runtime
• Reflection, Expressions LINQ
De quoi disposons nous ?
![Page 6: La Meta-programmation](https://reader033.vdocuments.pub/reader033/viewer/2022052209/5596d5621a28ab91098b45cd/html5/thumbnails/6.jpg)
Code / Développement
• Génération pre-compilation– T4
– NuGet
– Roslyn (via T4 ou NuGet)
Qu’allons-nous voir aujourd’hui ?
![Page 7: La Meta-programmation](https://reader033.vdocuments.pub/reader033/viewer/2022052209/5596d5621a28ab91098b45cd/html5/thumbnails/7.jpg)
Code / Développement
• 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 !
Pourquoi faire ?
![Page 8: La Meta-programmation](https://reader033.vdocuments.pub/reader033/viewer/2022052209/5596d5621a28ab91098b45cd/html5/thumbnails/8.jpg)
Code / Développement
• 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)
Comment faire ?
![Page 9: La Meta-programmation](https://reader033.vdocuments.pub/reader033/viewer/2022052209/5596d5621a28ab91098b45cd/html5/thumbnails/9.jpg)
Code / Développement
• 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 !
Une vieille idée qui ne s’est jamais imposée
![Page 10: La Meta-programmation](https://reader033.vdocuments.pub/reader033/viewer/2022052209/5596d5621a28ab91098b45cd/html5/thumbnails/10.jpg)
Code / Développement
• 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
Pourquoi ça changerait ?
![Page 11: La Meta-programmation](https://reader033.vdocuments.pub/reader033/viewer/2022052209/5596d5621a28ab91098b45cd/html5/thumbnails/11.jpg)
Code / Développement
• T4 et NuGet sont de plus en plus utilisés,
notamment par Microsoft
Les choses sont en train de changer
![Page 12: La Meta-programmation](https://reader033.vdocuments.pub/reader033/viewer/2022052209/5596d5621a28ab91098b45cd/html5/thumbnails/12.jpg)
T4
Design
![Page 13: La Meta-programmation](https://reader033.vdocuments.pub/reader033/viewer/2022052209/5596d5621a28ab91098b45cd/html5/thumbnails/13.jpg)
Code / Développement
• 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
T4
![Page 14: La Meta-programmation](https://reader033.vdocuments.pub/reader033/viewer/2022052209/5596d5621a28ab91098b45cd/html5/thumbnails/14.jpg)
Code / Développement
• 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
T4
![Page 15: La Meta-programmation](https://reader033.vdocuments.pub/reader033/viewer/2022052209/5596d5621a28ab91098b45cd/html5/thumbnails/15.jpg)
using System;
Code / Développement
Exemple de T4
namespace MyNS
{
public class MyClass
{
public void Foo()
{
}
}
}
Console.WriteLine("azerty");
Console.WriteLine("qwerty");
![Page 16: La Meta-programmation](https://reader033.vdocuments.pub/reader033/viewer/2022052209/5596d5621a28ab91098b45cd/html5/thumbnails/16.jpg)
Code / Développement
• 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
T4
![Page 17: La Meta-programmation](https://reader033.vdocuments.pub/reader033/viewer/2022052209/5596d5621a28ab91098b45cd/html5/thumbnails/17.jpg)
Code / Développement
Exemple de T4
foo.ttinclude
foo.tt
![Page 18: La Meta-programmation](https://reader033.vdocuments.pub/reader033/viewer/2022052209/5596d5621a28ab91098b45cd/html5/thumbnails/18.jpg)
T4 - DEMO
Design
![Page 19: La Meta-programmation](https://reader033.vdocuments.pub/reader033/viewer/2022052209/5596d5621a28ab91098b45cd/html5/thumbnails/19.jpg)
NUGET
Design
![Page 20: La Meta-programmation](https://reader033.vdocuments.pub/reader033/viewer/2022052209/5596d5621a28ab91098b45cd/html5/thumbnails/20.jpg)
Code / Développement
• 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
NuGet
![Page 21: La Meta-programmation](https://reader033.vdocuments.pub/reader033/viewer/2022052209/5596d5621a28ab91098b45cd/html5/thumbnails/21.jpg)
Code / Développement
• 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
NuGet
![Page 22: La Meta-programmation](https://reader033.vdocuments.pub/reader033/viewer/2022052209/5596d5621a28ab91098b45cd/html5/thumbnails/22.jpg)
NUGET - DEMO
Design
![Page 23: La Meta-programmation](https://reader033.vdocuments.pub/reader033/viewer/2022052209/5596d5621a28ab91098b45cd/html5/thumbnails/23.jpg)
ROSLYN
Design
![Page 24: La Meta-programmation](https://reader033.vdocuments.pub/reader033/viewer/2022052209/5596d5621a28ab91098b45cd/html5/thumbnails/24.jpg)
Code / Développement
• Est apparu en CTP fin 2011
• Toujours en CTP (v1.2)
• Investissement important de la part de
Microsoft
• Vision à long terme
Roslyn
![Page 25: La Meta-programmation](https://reader033.vdocuments.pub/reader033/viewer/2022052209/5596d5621a28ab91098b45cd/html5/thumbnails/25.jpg)
Code / Développement
• 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 !
Roslyn
![Page 26: La Meta-programmation](https://reader033.vdocuments.pub/reader033/viewer/2022052209/5596d5621a28ab91098b45cd/html5/thumbnails/26.jpg)
ROSLYN - DEMO
Design
![Page 27: La Meta-programmation](https://reader033.vdocuments.pub/reader033/viewer/2022052209/5596d5621a28ab91098b45cd/html5/thumbnails/27.jpg)
Code / Développement
• 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é
Conclusion
![Page 28: La Meta-programmation](https://reader033.vdocuments.pub/reader033/viewer/2022052209/5596d5621a28ab91098b45cd/html5/thumbnails/28.jpg)
Code / Développement
• Stand Infinite Square (44 Espace Windows 8
& expériences numériques)
Démo de WAQS
![Page 29: La Meta-programmation](https://reader033.vdocuments.pub/reader033/viewer/2022052209/5596d5621a28ab91098b45cd/html5/thumbnails/29.jpg)
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
![Page 30: La Meta-programmation](https://reader033.vdocuments.pub/reader033/viewer/2022052209/5596d5621a28ab91098b45cd/html5/thumbnails/30.jpg)
Formez-vous en ligne
Retrouvez nos évènements
Faites-vous accompagner
gratuitement
Essayer gratuitement nos
solutions IT
Retrouver nos experts
Microsoft
Pros de l’ITDéveloppeurs
www.microsoftvirtualacademy.comhttp://aka.ms/generation-app
http://aka.ms/evenements-
developpeurshttp://aka.ms/itcamps-france
Les accélérateurs
Windows Azure, Windows Phone,
Windows 8
http://aka.ms/telechargements
La Dev’Team sur MSDN
http://aka.ms/devteam
L’IT Team sur TechNet
http://aka.ms/itteam