La reflexion est aujourd’hui de voir comment étendre c# sans attendre Roslyn qui n’est prêt à attaquer des projets en production alors que Nemerle est suffisamment mature pour cela.
Par exemple nous pouvons simplement créer un nouveau mot clé du langage et l’utiliser:
Comme on le voit ici, la grosse différence avec Roslyn c’est que dans Nemerle, l’extension du langage est normale et se fait comme n’importe quelle fonction d’un programme, il n’y a pas besoin de faire de manipulation compliquée d’AST.
Ceci se fait donc par la mécanique des macros, qui existe dans les langages fonctionnels comme lisp. Le tout sans manipulation d’arbres ou d’IL.
De même au niveau du compileur, il est suffisamment intelligent pour produire du c# comme du Nemerle, donc les macros Nemerle peuvent être profitables en c#.
Le principe est de créer des sources c# dans des projets Nemerle pour signaler que l’on veut utiliser le compilateur Nemerle au lieu de celui de Microsoft.
On peut même dans ces projets créer des classes partielles moitié c# moitié Nemerle.
Par ex en définissant une macro qui va rajouter une méthode sur toutes les classes du projet.
On pourra de manière transparente utiliser cette méthode directement dans notre code c#. Pour s’en certifier, il suffit de voir avec réflectorisé le c# generé.
De la même manière en partant sur ce principe de macros, on peut faire tout ce que l’on fait avec des frameworks d’aop mais sans framework, juste avec le compilateur Nemerle…
Donc en allant plus loin et en rassemblant les pièces:
Par exemple on peut créer des projets de tests sans faire de référence à nunit ou définir les attributs, on peut les injecter simplement par une macro Nemerle. On peut le faire comme des méthodes d’extension, ou des attributs directement en c# aussi.
Nemerle possède aussi un certain nombre de librairies utilisables en c#, pour étendre les fonctionnalités, faire du design by contract ou encore gérer la nullabilité( bibliothèque Nemerle.Assertions).
Par contre bien sur il n’est pas possible pour des raisons de compatibilité d’ajouter des mots clés du langage directement en c#.
De tout ça que peut on conclure?
Nemerle avec ses macros permet de faire au final des choses plus puissantes et des maintenant que Roslyn.
Mais très concrètement, au final, avec une syntaxe identique au c# mais avec des fonctionnalités en plus issues du fonctionnel et du Meta programming, pourquoi ne pas passer directement à des programmes tout Nemerle?





