Codingly

CIL Programming, presque under the hood of .NET

Posted in Posts by Romain Verdier on juillet 10, 2008

J’ai terminé il y a quelques semaines la lecture d’un des seuls livres publiés au sujet du langage intermédiaire de la plateforme .NET. J’ai nommé CIL Programming, Under the hood of .NET de Jason Bock.

Je me suis appliqué, un parfait cover to cover, mais je le regrette un peu. Il ne doit pas être évident d’écrire un livre sur un sujet aussi chiant particulier, donc je ne peux raisonnablement pas être aussi acerbe que déçu. Car j’ai été assez déçu.

Si on ne s’attend pas à mourir de rire à chaque page lorsqu’on entame la lecture d’un livre du genre (avez-vous déjà essayé de faire une blague sur le CIL ?), on espère au moins en tirer quelque chose, ou plus exactement, quelque chose que l’on n’aurait pas pu – ou pas mieux pu – apprendre ailleurs. CIL Programming m’a donné l’impression d’être trop souvent approximatif à plusieurs niveaux : structure, rédaction, exemples, blagues (oui, Jason a essayé), références, etc. Pour être honnête, j’ai abordé cette lecture avec pour objectif d’acquérir une meilleure compréhension du langage intermédiaire de la plateforme .NET et plus particulièrement des possibilités offertes aux langages de plus haut niveau quant à sa génération/manipulation ; mais j’avais déjà une compréhension globale du langage ainsi qu’une expérience assez modeste de l’API System.Reflection.Emit.

C’est peut-être pour cette raison que j’ai été déçu. Quoi qu’il en soit, il serait dommage qu’en ayant une connaissance superficielle du sujet on en sache déjà trop pour trouver la lecture profitable. On parle bien d’un livre, hein, pas d’un article de blog ou d’un post dans le forum de codes-sources.com.

Le livre progresse doucement, trop doucement ; il frôle parfois le formalisme soporifique d’une spécification de langage sans pour autant parvenir au même niveau de complétude et de concision. Beaucoup de questions sont laissées en suspens malgré l’abus de références croisées (assez fatigantes), et cela conduit inévitablement le lecteur à se demander s’il n’a pas été trompé lorsqu’il arrive aux annexes.

Outre les chapitres qui listent les différents codes d’opérations du langage, vous pourriez éventuellement trouver un intérêt à lire en diagonale au moins les chapitres 5, 6 et 7 (cf. liste ci-dessous). Le chapitre 8, qui aurait pu être le plus intéressant pour les développeurs voulant générer dynamiquement du CIL est finalement compromis par la qualité de l’exemple lui-même (pourtant pertinent).

Pour le contenu, voici la liste des chapitres :

  • Chapter 1: Language Interoperability
  • Chapter 2: ILASM Directives and Attributes
  • Chapter 3: CIL Opcodes
  • Chapter 4: ILASM and CIL in Practice
  • Chapter 5: Debugging CIL
  • Chapter 6: .NET Languages and CIL
  • Chapter 7: Emitting Types
  • Chapter 8: Dynamic Proxies in .NET
  • Chapter 9: CIL Tips
  • Appendix A The Future of CIL
  • Appendix B .NET

Au risque donc de paraitre déraisonnable, je vous déconseille assez franchement ce livre.

CIL Programming, Under the hood of .NET
Jason Bock
8/20
Tagged with: , , ,

2 Réponses

Subscribe to comments with RSS.

  1. Jb Evain said, on juillet 16, 2008 at 7:20

    Et «out of curiosity», il dit quoi dans l’appendice A ?

    Parce que si de notre côté on sait rien à propos de .net 4 (on ne sait pas si ils vont changer le runtime/mscorlib ou pas), je sais pas trop ce qu’il peut savoir pour le futur.

  2. Romain Verdier said, on juillet 17, 2008 at 8:05

    En fait, le bouquin est sorti en juin 2002, pas très longtemps après la première release de .NET finalement. Dans l’annexe A, de 5 pages, on apprend pas grand chose puisqu’en 2008 on est capable de valider (ou non) les prophéties de Jason. Il prévoyait principalement :

    – Le support des generics au niveau CIL.
    – Une pseudo gestion des closures au niveau CIL.
    – L’inlining CIL, i.e. la possibilité d’inclure directement du code CIL au sein d’un fichier source d’un language de plus haut niveau.

    Pour les generics c’était prévu de longue date (cf. ce document souvent référencé). Les méthodes anonymes et les expressions lambda ne concernent que la compilation, et je n’ai pas entendu parler d’inlining CIL.

    Pas de révélation sur .NET 4, donc…


Votre commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l’aide de votre compte WordPress.com. Déconnexion /  Changer )

Image Twitter

Vous commentez à l’aide de votre compte Twitter. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l’aide de votre compte Facebook. Déconnexion /  Changer )

Connexion à %s

%d blogueurs aiment cette page :