La reflection est une technique que l'on retrouve dans beaucoup de langages et de plateformes modernes, parfois sous le nom d'introspection, et qui fourni une interface au programmeur, pour pouvoir consulter l'intérieur d'un programme.
Le programmeur aura donc accès aux primitives du langage : classes, méthodes, champs, etc. Il existe déjà un mécanisme de reflection intégré à FCL (Foundation Class Library, l'ensemble des classes de bases proposés au mininum par une implémentation du standard ECMA-335 CLI, c'est à dire le Framework .net, Mono, et Portable.net), mais cette librairie dans sa version actuelle est encore très jeune et manque de détails.
C'est pour cette raison que j'ai commencé ce développement, car la librairie principale ne m'était pas utile, et que les autres développement de ce type étaient sois arretés (la librairie Rail par exemple), ou encore tout simplement pas en Open Source (le CodeModel de Reflector).
A moyen terme, cette librairie va permettre d'analyser des programmes .net, ce qui va permettre à Mono de se doter de programmes comme ceux disponibles sur le Framework .net, à savoir peverify, un utilitaire pour vérifier que le code intermédiaire généré par un compilateur pour le CLR est correct, et qu'il ne comporte pas d'anomalies. Comme exemple je montre dans le blog pointé ci dessus un exemple d'un autre programme .net qui pourrait être porté sous Mono : ildasm, un utilitaire permettant de consulter le contenu de son programme, et le code intermédiaire d'une assembly (en gros, l'unité d'une programme/librairie en .net). On pourrait aussi imaginer faire un programme comme FxCop, de chez Microsoft. Ce programme permet de définir un set de "rules", des règles que l'on peut nous même écrire, et appliquer sur une assembly. FxCop va alors nous dire si notre programme est conforme aux regles définies. Il existe des règles de nommage (variables, champs, classes...), mais aussi des règles plus orientées code, que je ne listerai pas ici :)
Cette librairie à cependant écrite à la base pour manipuler des assemblies, donc les lire, les modifier, et les écrire. C'est le socle d'un programme dont je suis le co-auteur : AspectDNG. Ce programme va permettre de définir dans un langage tiers (un fichier de description XML), comment mon outil va injecter du code a partir d'une librairie dans une autre. C'est la base de ce qu'on appelle un tisseur d'aspect statique, qui est un outil pour faire de la programmation orientée aspect. Plusieurs liens en dessous pour mieux comprendre :
[^] # Re: Un peu plus de détail ?
Posté par Jb Evain . En réponse au journal Cecil : Mono se dote d'une belle reflection !. Évalué à 10.
La reflection est une technique que l'on retrouve dans beaucoup de langages et de plateformes modernes, parfois sous le nom d'introspection, et qui fourni une interface au programmeur, pour pouvoir consulter l'intérieur d'un programme.
Le programmeur aura donc accès aux primitives du langage : classes, méthodes, champs, etc. Il existe déjà un mécanisme de reflection intégré à FCL (Foundation Class Library, l'ensemble des classes de bases proposés au mininum par une implémentation du standard ECMA-335 CLI, c'est à dire le Framework .net, Mono, et Portable.net), mais cette librairie dans sa version actuelle est encore très jeune et manque de détails.
C'est pour cette raison que j'ai commencé ce développement, car la librairie principale ne m'était pas utile, et que les autres développement de ce type étaient sois arretés (la librairie Rail par exemple), ou encore tout simplement pas en Open Source (le CodeModel de Reflector).
A moyen terme, cette librairie va permettre d'analyser des programmes .net, ce qui va permettre à Mono de se doter de programmes comme ceux disponibles sur le Framework .net, à savoir peverify, un utilitaire pour vérifier que le code intermédiaire généré par un compilateur pour le CLR est correct, et qu'il ne comporte pas d'anomalies. Comme exemple je montre dans le blog pointé ci dessus un exemple d'un autre programme .net qui pourrait être porté sous Mono : ildasm, un utilitaire permettant de consulter le contenu de son programme, et le code intermédiaire d'une assembly (en gros, l'unité d'une programme/librairie en .net). On pourrait aussi imaginer faire un programme comme FxCop, de chez Microsoft. Ce programme permet de définir un set de "rules", des règles que l'on peut nous même écrire, et appliquer sur une assembly. FxCop va alors nous dire si notre programme est conforme aux regles définies. Il existe des règles de nommage (variables, champs, classes...), mais aussi des règles plus orientées code, que je ne listerai pas ici :)
Cette librairie à cependant écrite à la base pour manipuler des assemblies, donc les lire, les modifier, et les écrire. C'est le socle d'un programme dont je suis le co-auteur : AspectDNG. Ce programme va permettre de définir dans un langage tiers (un fichier de description XML), comment mon outil va injecter du code a partir d'une librairie dans une autre. C'est la base de ce qu'on appelle un tisseur d'aspect statique, qui est un outil pour faire de la programmation orientée aspect. Plusieurs liens en dessous pour mieux comprendre :
AOP : http://en.wikipedia.org/wiki/Aspect-oriented_programming(...)
AspectDNG : http://aspectdng.sourceforge.net(...)
Reflexion : http://en.wikipedia.org/wiki/Reflection_%28computer_science%29(...)
J'espère avoir éclairci un peu le sujet :)