Fin avril, Microsoft a dévoilé la preview d'une fonctionnalité du compilateur C#. Appelée « Source Generators », celle-ci peut inspecter un programme et générer des fichiers sources qui pourront être ajoutés à la compilation. Microsoft affirme que cette fonction peut améliorer les performances dans un certain nombre de scénarios. Il s’agit d’un bout de code (un assemblage .NET Standard 2.0) qui s'exécute pendant la compilation et peut inspecter un programme pour produire des fichiers supplémentaires qui seront compilés avec le reste du code.

Avec Source Generators, les développeurs C# pourront :

- Récupérer une compilation avec tout le code utilisateur en cours de compilation. Cet objet pourra être inspecté et les développeurs pourront écrire du code qui fonctionne avec la syntaxe et les modèles sémantiques du code en cours de compilation, comme avec les analyseurs.

- Générer des fichiers source C# qu’ils souhaitent ajouter à un objet de compilation pendant la compilation. Ce code source supplémentaire sera fourni en entrée pendant la compilation du code.

Selon Microsoft, le code utilisateur pourra être inspecté en même temps que les métadonnées riches que le compilateur accumule pendant la compilation, le code C# étant réémis dans la même compilation sur la base des données analysées. Source Generators est comparable aux analyseurs Roslyn qui servent à inspecter le code C# ou Visual Basic, et peuvent émettre du code source C#.

La fonctionnalité sera intégrée à la version 9.0 du langage C#, en cours de développement. Microsoft a mis à disposition un livre intitulé « Source Generators Cookbook » ainsi qu’un document expliquant comment concevoir des Générateurs de sources pour permettre aux développeurs de se familiariser avec la fonction.

Plusieurs scénarios peuvent tirer parti de Source Generators:

- Pour réaliser une réflexion de runtime : par exemple, en analysant le code au démarrage d'une application, une phase de découverte du contrôleur pourrait intervenir pendant la compilation, ce qui accélérerait le temps de démarrage.

- Pour éviter l’usage d'API « à typage strict » : c’est ce qui se passe par exemple lors du routage ASP.NET Core entre les contrôleurs et les pages Razor. La fonction permet de typer fortement le routage et de générer les chaînes de caractères nécessaires au moment de la compilation.

- Lever les obstacles qui empêchent l'optimisation de la compilation basée sur les liens et celle de la compilation « ahead-of-time.

Pour accéder à Source Generators, les développeurs doivent installer les dernières preview de .NET 5 et de Visual Studio.