Roslyn, le compilateur open-source pour les langages C# et VB.NET développé par Microsoft. Au travers de plusieurs APIs, Roslyn nous offre la possibilité de découvrir ce qu’il se cache dans la boite noire du compilateur. L’accès aux arbres syntaxiques et à la sémantique nous permet déjà de réaliser des Diagnostics (détection de la mauvaise utilisation d’une méthode, anti-pattern, etc…), et d’en proposer un Fix (correction du code, refactoring, avec une preview directement dans l’IDE, façon Resharper). De quoi faciliter les upgrades de librairies, le refactoring, l’AOP ou encore de large migration de code.
Ce qui était bien
Une présentation claire faite à la main (Andersons’s style).
Une petite remise à niveau sur le travail du compilateur (Lexer, Parser, ...).
Le patching en live de Roslyn sur la déclaration des IEnumerable : un bon exemple de l’ouverture du compilateur, mais à ne pas refaire à la maison.
Mais aussi des cas plus concrets autour des APIs de UnityVS.
Ce qui était moins bien
Ce qu'on en retient
Roslyn permet de passer d’une boite noire complètement opaque à un compilateur totalement ouvert avec de multiples niveaux d’API.
Un retard sur les autres langages de développement bientôt rattrapé par Microsoft.
De très nombreuses possibilités s’ouvrent à présent pour l’outillage autour de .NET…
… avec déjà la possibilité de réaliser des diagnosctics et des fix.
On est cependant loin de pouvoir se séparer de Resharper, à qui il reste encore pas mal de beaux jours
On espère pourquoi pas une intégration avec Nuget permettant d’embarquer des diagnostic et des fix en même temps qu’on ajoute une librairie à son projet.
Pattern qui conduit généralement à des problèmes pourtant bien connus de maintenabilité, réutilisabilité, interdépendances, lenteur des rythme de déploiements, etc…
La solution proposée ici est un découpage en modules et non en tiers applicatifs. On se concentrera alors sur la communication des modules et leurs interfaces, plutôt que sur du code legacy (pas toujours très propre). On commence donc par se baser sur un protocole de communication (REST, ServiceBus, WebService, …) qu’il faudra alors choisir avec soin selon les points critiques de notre application. Il suffit ensuite d’encapsuler le code Legacy dans des interfaces propres et bien définies, et de rendre le tout accessible via APIs.
Ce qui était bien
Un sujet assez peu abordé et pourtant essentiel.
Pas un simple pattern théorique, mais une réalité en prod actuellement.
Une présentation language agnostic.
Un talk clair et bien mené.
Ce qui était moins bien
Peut-être un passage, même rapide, sur l’infra nécessaire à une telle architecture aurait été le bienvenu.
Voir une peu de code pour concrétiser un peu plus le sujet
Ce qu'on en retient
“Start small”: comme tous les refactos, si on commence trop ambitieux, on finit par tout toucher d’un coup (et on y passe des mois).
Choisir un protocole de communication adapté à l’application.
Définir des interfaces propres, qui se contenteront dans une premier temps d’encapsuler le Legacy code.
Se concentrer sur la communication entre les modules plutôt que les modules eux-mêmes.
Réitérer sur chaque module de la même manière, afin de tous les isoler avant de commencer à passer du temps sur le Legacy d’un module.
Ne pas hésiter à laisser un module peu critique avec du Legacy pas forcément très propre pour se concentrer sur les modules au coeur du système.
Un talk très technique autour du C#: comment réaliser une application low-latency avec du code managé.
Véritable chasse au Garbage Collector et aux allocations, cette présentation a le mérite de nous dire “Oui c’est possible (mais ce sera pas simple) !”.
Ce qui était bien
Un sujet très technique, avec du code et tout !
Une véritable enquête de terrain qui s’est avérée très intéressante.
Des détails pointus sur les patterns appliqués.
Ce qui était moins bien
Ce qu'on en retient
Inutile de courir après la micro-optimisation (i++ ⇒ ++i, foreach() ⇒ for(), ...)
Le GC n’est plus notre ami.
Moins on a d’alloc, mieux c’est.
Et pour ça, les Structs sont nos amis…
… mais attention au boxing lorsqu’on les utilisent avec leurs interfaces !
(*Comprendrons ceux qui ont partagé ce moment)