Journal Cecil : Mono se dote d'une belle reflection !

Posté par  .
Étiquettes : aucune
0
10
jan.
2005
Mono avance tous les jours, mais aujourd'hui en particulier, puisque Cecil vient d'y être ajouté. Cecil est un module de Reflection écrit par Jb Evain. Allez donc voir les sources, c'est de toute beauté !

Plutôt que de répéter, je vous envoie vers son post : http://blogs.dotnetguru.org/jbevain/index.php?title=cecil_feed(...)
  • # Un peu plus de détail ?

    Posté par  . Évalué à 6.

    N'ayant pas bien compris de quoi il s'agissait en lisant l'article, j'ai suivi le liens, mais j'ai toujours rien compris... Pas de chance le screenshot ne m'a pas aidé non plus.
    En gros c'est quoi et ça sert à quoi ?
    C'est juste pour avoir un bref aperçu sans avoir à passer trop de temps dessus... merci :)
    • [^] # Re: Un peu plus de détail ?

      Posté par  . Évalué à -1.

      La Reflection, c'est l'introspection du code : l'analyse 'bas niveau' d'une assembly (d'un programme). Par exemple, l'auteur de Cecil a développé ce module parce-qu'il développe un tisseur d'aspect en C#. Ainsi, il peut tout faire en code managé.
      • [^] # Re: Un peu plus de détail ?

        Posté par  . Évalué à 10.

        La Reflection, c'est l'introspection d'une assembly, [...] parce-qu'il développe un tisseur d'aspect [...]

        Nul doute que ca va lui sembler plus clair :)

        M
      • [^] # Re: Un peu plus de détail ?

        Posté par  . Évalué à 10.

        La Reflection, c'est l'introspection du code : l'analyse 'bas niveau' d'une assembly (d'un programme). Par exemple, l'auteur de Cecil a développé ce module parce-qu'il développe un tisseur d'aspect en C#. Ainsi, il peut tout faire en code managé.

        C'est ça qu'est beau avec l'informatique : Pour celui qui comprends c'est utile, pour celui qu'entrave que dalle c'est pure poésie !
        Dis papa noél quand est-ce que tu m'apportes un tisseur d'aspect ?
        - Tu l'auras si tu as bien managé le code toute l'année mon p'tit !
    • [^] # Re: Un peu plus de détail ?

      Posté par  (site web personnel) . Évalué à 8.

      dis en plus simple (mais peut etre moins "exact" et "complet), l'introspection permet de se placer a un niveau plus haut a l'execution. Par exemple, tu recuperes un objet mais tu ne sais pas ce que c'est, mais tu veux l'utiliser: tu lui demandes quelles sont ses methodes, ses attributs, son nom, son age, s'il prefere les pommes ou les peches, etc. En java, tu peux trouver tous ces trucs dans le packages java.lang.reflect (tu peux aller y faire un tour sur la javadoc, tu comprendra assez vite ce que ca fait je pense)

      Marc
    • [^] # Re: Un peu plus de détail ?

      Posté par  (site web personnel) . Évalué à 10.

      Bonjour,

      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 :)
      • [^] # Re: Un peu plus de détail ?

        Posté par  (site web personnel) . Évalué à 2.

        Justement en parlant de ça

        je cherche à faire de la qualimétrie sur du code .

        cad
        -vérifier le nombre de ligne dans les méthodes.
        -vérifier si des lignes ne font pas plus de 80 caractères
        -vérifier le formatage des noms de variables.
        -etc...

        FxCop doit pouvoir le faire, mais ca représente beaucoup de paramétrages.

        Existe-t-il une alternative ?

        Merci d'avance
      • [^] # Re: Un peu plus de détail ?

        Posté par  (site web personnel) . Évalué à 3.

        Mon point de vue sur l'intérêt de AspectDNG par rapport à d'autres tisseurs d'aspect comme JAspect :
        AspectDNG travaille directement au niveau du bytecode et non au niveau du source, c'est une différence que l'on retrouve dans de nombreux "équivalents" entre les mondes .NET et Java. .NET étant "officiellement" multi-langages, ces outils qui travaillent directement sur le bytecode sont utilisables avec n'importe quel langage ciblant la plateforme et ont souvent des possibilités de manipulation beaucoup plus importantes.
        Encore bravo Jb, et bonne continuation à toute l'équipe de DotNetGuru (super site pour tous les développeurs curieux et autre architectes passionnés de .NET ET Java :-) )
        • [^] # Re: Un peu plus de détail ?

          Posté par  (site web personnel) . Évalué à 1.

          C'est gentil pour AspectDNG, mais AspectJ travaille lui aussi sur du byte code grace à la librairie BCEL de chez Jakarta.

          Il existe aussi de nombreuses librairies de manipulation de bytecode dans le monde Java, on peux noter les plus connues BCEL et SERP, mais aussi un petit outsider excellent issu de chez ObjectWeb : ASM, très leger, et très performant.
  • # Commentaire supprimé

    Posté par  . Évalué à 3.

    Ce commentaire a été supprimé par l’équipe de modération.

    • [^] # Re: de l'article de linux mag

      Posté par  (site web personnel) . Évalué à 4.

      D'abord pour avoir le choix.
      JAva et .NET ont de nombreux points communs mais aussi des spécificités, dont découle une saine émulation entre les 2 plateformes (cf C# 2.0 et Java 1.5).

      Après comme tout framework choisir de développer avec ces environnements lie ton code à une techno et créé donc une dépendance. D'un point de vue commercial les 2 environnements propose désormais un choix d'implémentation et on n'est donc pas dépendant d'un éditeur particulier.

      Reste à voir le long terme pour apprécier la durée de vie de ces plateforme et donc la pérénité des applications que l'on développe. A mon avis les 2 plateformes continueront de cohabiter, parcqu'elles sont proches mais aussi parcqu'un effort des 2 parties est fait pour assurer l'interopérabilité des environnements.

      Après tu peux troller sur le fait que Microsoft c'est mal (mais pourquoi Sun serait mieux ?), mais mon conseil et d'aller lire les nombreux trolls que tu trouveras sur google : tu arrivera toujours à la même conclusion : il y a les trolleurs qui discutent ethique, les 2 gros (MS et Sun) qui font avancer les bousins, et les hackeurs fous qui faute de pouvoir disposer d'une force de frappe commercial et d'un labo de recherche avec tous pleins de monde payés rien que pour ça, s'évertue à proposer à la communauté des environnements compatibles et libres, afin que tu n'es plus besoin de te poser les questions politico-trollesque habituelles.
      • [^] # Re: de l'article de linux mag

        Posté par  (site web personnel) . Évalué à 4.

        Bon allez pour me compléter moi même, une petite news qui devrait réveiller certains trolls sur Java :
        http://www.pcinpact.com/actu/news/Plus_de_licence_Java_pour_FreeBSD(...)
        A vrai dire je comprends pas trop la réaction de Sun, c'est vraiment à l'opposé de l'opinion globale qui vise à demander à Sun plus d'ouverture. En tout cas celà confirme clairement que Sun garde une main mise sur sa plateforme.
        Sur la plateforme concurrente en tout cas il n'y a aucune licence à négocier puisque c'est standardisé et normalisé.
        • [^] # Commentaire supprimé

          Posté par  . Évalué à 4.

          Ce commentaire a été supprimé par l’équipe de modération.

          • [^] # Re: de l'article de linux mag

            Posté par  (site web personnel) . Évalué à 3.

            Tu peux me prouver le contraire ?
            Tiré du site www.mono-project.com :
            "The core of the .NET Framework, and what has been patented by Microsoft falls under the ECMA/ISO submission. Jim Miller at Microsoft has made a statement on the patents covering ISO/ECMA, (he is one of the inventors listed in the patent): here - http://web.archive.org/web/20030609164123/http://mailserver.di.unip(...) - .

            Basically a grant is given to anyone who want to implement those components for free and for any purpose.

            The controversial elements are the ASP.NET, ADO.NET and Windows.Forms subsets. Those are convenient for people who need full compatibility with the Windows platform, but are not required for the open source Mono platform, nor integration with today's Mono's rich support of Linux."


            Pour résumer, tu peux très bien développer avec Mono sans aucun problème.

            Au fait n'oublies pas que d'un point de vue juridique, quelque soit le langage/techno que tu utilises, tu y trouvera toujours quelque chose de breveté, en premier lieu dans le noyau Linux, dans les libs, etc. Dans tous les cas les brevets ça pu, et ça pu pas plus dans Mono que dans autre chose.
          • [^] # Re: de l'article de linux mag

            Posté par  (site web personnel, Mastodon) . Évalué à 5.

            De toutes les manières il y a des brevets partout désormais, d'ailleurs le W3C est bien emmerdé avec ça. Mais c# peut être utilisé sans soucis (en gros tu peux librement utiliser c# quand même), ce qui pose soucis c'est tous les composants qui tournent autour de Windows (winform, etc), mais ça tu t'en fous, tu ne les utilises pas.

            De ce que j'en ai vu, je ne comprends pas la politique de Sun sur Java, et à mon avis ils continuent à s'enfoncer. Après avoir fait un peu de c# je trouve le language intéressant conceptuellement (c'est du Java en gros) et ça marche très bien sous Linux. Je prends un truc .exe codé sous Windows (sans winform and co évidemment), je le teste sous Linux, ça marche nikel, côté performance ça roule aussi.

            J'ai passé un truc de C à C#, évidemment ça me bouffe 10 fois plus de RAM (de 3Mo à 30Mo en gros) mais c'est peu finalement pour avoir un code objet propre, ne pas avoir à gérer la mémoire (beaucoup de bugs en moins) et avoir des performances décentes. Finalement quand je code je veux faire un truc qui marche, et en 2005 je veux être plus efficace sur mes développements, pouvoir utiliser rapidement des composants téléchargés ailleurs pour ne pas avoir à les réimplémenter. Les languages types c# apportent ça.
            • [^] # Commentaire supprimé

              Posté par  . Évalué à 3.

              Ce commentaire a été supprimé par l’équipe de modération.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.