Blog du Pôle .NET

Partager pour mieux développer...

Dynamic Language Runtime

clock December 10, 2008 13:27 by author aequoy

Pour comprendre l’intégration des langages dynamiques dans .Net 4, il faut commencer par creuser sur l'élément moteur : le Dynamic Language runtime.

La mission première du DLR est de permettre aux langages dynamiques (python, ruby, pHp, javascript…) de s’interfacer avec .Net.

Un deuxième objectif est de permettre l’interopérabilité entre .Net et les interfaces COM IDispatch de manière simple et claire.

Un troisième  objectif est de rendre les langages .Net plus « dynamiques » en supportant le DLR.

 

Avec les types dynamiques, l’objet est maître de déterminer en runtime s’il supporte ou non le message ou l’opération qui lui est envoyé. Les objets dynamiques participent donc à un protocole de message afin de négocier de quelle manière un message abstrait est passé à un autre objet.

 

Les notions importantes à retenir du DLR sont :

·         Modèle de hosting commun pour attaquer la DLR : l’objet ScriptRuntime est le point d’entrée vers les langages dynamiques. Il permet d’exécuter du code dans le contexte d’exécution (ScriptScope) au travers d’un moteur de script (ScriptEngine) qui va choisir le langage dans lequel le code va être exécuté.

·         Utilisation d’arbres sémantiques (Expression Trees) : là on attaque une notion très abstraite du domaine de la linguistique (dédicace à Jeannine Leguy ;)). Le but étant d’organiser les expressions sous forme arborescente afin que l’analyseur syntaxique puisse résoudre facilement ces expressions.

·         Intégration d’emplacement d'appel dynamique (DynamicSites, SiteBinders, Rules) permettant de lier un appel dynamique (message émis par C# par exemple) à une cible (objet Python par exemple).

·         Typage dynamique partagé au travers de l’interface IDynamicObject et de MetaObject. MetaObject permet l’interopérabilité entre les langages. IDynamicObject va permettre de rendre le comportement dynamique.

·         Un ensemble d’utilitaires (default binder, tuples, big integers, adapters pour permettre aux types statiques de participer au protocol IDynamicObject)

 Voilà un petit aperçu du DLR. Il va falloir pas mal de temps afin de creuser les impacts, les apports du type dynamic dans .Net.

Alexandre Equoy

Currently rated 4.5 by 2 people

  • Currently 4.5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5


C# 4 : Dynamic object

clock December 8, 2008 23:00 by author aequoy

Pour celles et ceux qui n'ont pas suivi la PDC 2008, une des nouveautés montrées par la team C# dans C#4 concerne la possibilité d'exécuter des opérations, dont les détails ne seront connus qu'à l'exécution, en utilisant le mécanisme de délégation soutenu par le DLR (Dynamic Language Runtime).

Ca paraît complexe dit comme cela :) (la phrase n'est pas de Marcel Proust) et bien en fait ça l'est:)

Un petit exemple s'impose :

dynamic d = GetDynamicObject();<br/>
d.MethodeResolueAlExecution();
//Marcel Proust Powered :)

Comme vous pouvez voir, la variable locale "d" est du type dynamic, qui est un type compris par le compilateur. Ce code compile (donc on release;) )et il aurait compilé quel que soit le nom de la méthode. Le type "dynamic" est un type très spécial (^^).

Pour le compilateur, la différence avec une variable normale est qu'il n'est pas possible d'émettre un IL (Intermediate Language ) appelant la méthode MethodeResolueAlExecution car il ne connait pas le type "d". Il émet donc un "emplacement d'appel dynamique" pour permettre de résoudre l'appel à l'exécution (via le DLR).

Mais à quoi cela peut-il servir ????

Cela va permettre d'utiliser C#, pour invoquer des méthodes écrites avec des langages dynamiques tels Python/Ruby où, chose plus intéressante, sur n'importe quel objet COM IDispatch, sans même un chargement interop (ou wrapper).

Un exemple issu de codeplex mettant en évidence (c'est pas si évident que cela en fait :) ) le DLR :

J'ai une méthode écrite en python (satan, sors de ce corps !!!)

def welcome(name): return "Hello '" + name + "' from IronPython"

La suite, un main C# qui va charger puis appeler la méthode :

static void Main(string[] args) {
Console.WriteLine("Loading helloworld.py...");
ScriptRuntime py = Python.CreateRuntime();
dynamic helloworld = py.UseFile("helloworld.py");
Console.WriteLine("helloworld.py loaded!");
for (int i = 0; i < 1000; i++) {
Console.WriteLine(helloworld.welcome("Employee #{0}"), i)
}
Console.WriteLine(); }

Pour la route, un webcast d'Anders Hejlsberg explicant la signification de l'introduction des types dynamiques dans C#4.

Je vous invite à regarder Deep Dive: Dynamic Languages in Microsoft .NET c'est extrêmement intéressant !

Alexandre Equoy

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5


Web Service HTTP-407 Proxy Access

clock December 1, 2008 05:19 by author yvue

Bonjour,

Un petit morceau de code juste au cas ou ... Pour ceux qui se trouve derrière un proxy et qui souhaite simplement consommer un service Web.
Pensez à specifier l'adresse du proxy !!!

monProxyWS.Proxy = new System.Net.WebProxy("http://Adresse de Mon Proxy");
monProxyWS.Proxy.Credentials = System.Net.CredentialCache.DefaultCredentials;

C'est simple mais ca evite de s'enerver tout seul devant cette fichue erreur 407

Yoann

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5


Calendrier

<<  July 2010  >>
MoTuWeThFrSaSu
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678
Afficher en pleine page

Visiteurs