Quantcast
Channel: #Rui » Languages
Viewing all articles
Browse latest Browse all 5

Ndcoslo – nemerle metaprogramming

$
0
0

20120608-162007.jpg

Nous avons vu hier le côté fonctionnel, nous allons voi maintenant le côté metaprogramming, autrement dit le côté sombre de la,force.

Pour rappel le metaprogramming créé des metaprogramming, les Meta programmes créent ou manipulent des programmes.

Voici ce que nous avons aujourd’hui à notre disposition en .net:

20120608-162219.jpg

Step 1 : demo T4.

(note: je ne detaille pas les exemples ici, il n’y a rien de particulier, mais vous pouvez les retrouver sur github/igor-tkachev)

En conclusion, cela génère beaucoup de code et ce n’est valable que pour des transformations dont on a l’information avant la compilation.

Step 2
Puis nous avons postsharp, et les aop en général mais ce sont des cas particuliers pour des besoins particuliers et ils ont aussi beaucoup de limitations.

Step 3
Nous avons aussi la réflexion et les expressions linq qui nous permettent aussi de générer et manipuler du code. Bien noter la différence entre Func qui génère un exécutable à la compilation et Expression de Func qui génère à la compilation une structure de données représentant une expression qu’il faudra compiler au runtime, ce qui veut dire qu’on a bien dans ce cas du code generé à la compilation, c’est donc bien dans le cas des expression du Meta programming.

Step 4:macros Nemerle

Nemerle est livre avec des projets spécifiques dédiés aux macros.

Un projet macro peut contenir n’importe quel code comme n’importe quel projet, mais ce code est destiné à être utilisé au moment de la compilation.

Nous voyons un exemple qui se connecte à une base, récupère le schéma, la définition de la macro ne prend que quelques lignes (sans compter le boiler plate d’accès à la base).

Une fois compilé nous avons à notre disposition directement le schéma de la base:

20120608-165230.jpg

Il y a d’autres types de macros, comme les macro attributes.

Si on regarde le code à l’usage, c’est un peu les mêmes outils que la réflexion, mais avec beaucoup plus de possibilités et de manière beaucoup plus simple (notamment par le fait que l’on ne soit pas obligés de manipuler des arbres ou des expressions mais que cela puisse se faire par des remplages texte/code inline).

Puis nous avons enfin les macros qui étendent le langage.

On commence par créer et tester un code que l’on voudrait voir généré, puis on code notre macro.
La nous pouvons utiliser les templates de code pour les parties génération, mais il faudra quand même travailler avec les expressions pour analyser les paramètres d’entrée de notre expression, mais cela reste très lightweight.

Les mots clés du langage et les macros supportent utf… Si on veut un mot clé en chinois, c’est possible:

20120608-171206.jpg

Le fait de pouvoir faire des choses comme ça représente le ‘dark side’ :-) mais c’est fun

notes: bon complément à ma première session sur Nemerle, c’est une bonne solution par rapport à beaucoup de contraintes que j’ai pu voir avec t4 ou Roslyn et cela apporte vraiment beaucoup au langage. Faudra vraiment que je joue avec!


Viewing all articles
Browse latest Browse all 5

Latest Images

Trending Articles



Latest Images