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 5.0 by 1 people

  • Currently 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


PLINQ dans VS 2010 .Net4

clock November 9, 2008 02:17 by author aequoy
Depuis hier je joue un peu :D avec VS 2010.
Entre 2 plantages, j'ai pratiqué quelques exemples de requêtes parallèlisées via PLINQ.
Dans ma machine virtuelle, il est pour l'instant très difficile de mesurer le gain (quelques millisecondes dans mes premiers tests).
En lisant un peu le blog de la team parallel extensions, il serait possible de simuler dans la machine virtuelle le multi coeur grâce à hyperV.

Donc wait and see, j'essaierai de mettre cela en place dans un futur proche avec l'aide d'un ingénieur IT.

En attendant, c'est assez bluffant, quasi-indolore au niveau du code.
Par contre les objets de requêtage PLINQ sont complètement différents de ceux de Linq (objectquery dans mon cas).
Linq

PLinq

Alexandre Equoy

Be the first to rate this post

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


UML et VS 2010

clock November 8, 2008 10:23 by author aequoy
Une des nouveautés de VS2010 concerne l'intégration de diagrammes UML (Yoann tu vas adorer :) )
Les 12 diagrammes UML ne sont pas intégrés.
Les 5 diagrammes les plus importants font leur apparition en plus du diagramme de classe existant :
  • Diagramme de cas d'utilisation
  • Diagramme d'activité
  • Diagramme de séquence
  • Diagramme de composant
  • Diagramme de couche
Personnellement c'est une excellente nouvelle qui va nous permettre d'intégrer plus de modélisation et de pilotage dans nos développements.

Be the first to rate this post

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


Graphs d'objets dans VS 2010

clock November 8, 2008 09:47 by author aequoy

Alexandre Equoy

Be the first to rate this post

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


Screenshots Visual Studio 2010 & Framework 4.0

clock November 8, 2008 09:24 by author aequoy
Quelques screenshots de Visual Studio 2010 CTP.




Alexandre Equoy

Currently rated 2.0 by 1 people

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


Visual Studio 10 et framework 4.0 CTP Preview disponible

clock November 8, 2008 02:48 by author aequoy

Un petit billet pour vous indiquer qu'une machine virtuelle contenant le framework 4 et Visual Studio 10 est disponible en téléchargement.

Lien vers le téléchargement: >Téléchargement

Je posterai quelques screenshots quand le téléchargement sera terminé.

Un lien si vous avez d'éventuels soucis avec les activations dans la VM

Alexandre Equoy

Be the first to rate this post

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


Silverlight Extension

clock November 6, 2008 06:00 by author aequoy

Les Silverlight Extension ont été développés en France (c'est français monsieur ;) ) pour faciliter l'utilisation de SilverLight² dans nos projets. 

Tout le code source est disponible gratuitement et peut être utilisé dans nos projets en production.
Pour cela SLExtensions est découpé en 3 catégories de ressources :

  • Des Controles :
    • Treeview
    • Captcha
    • Virtualized stack panel
    • Dockpanel
    • Flow layout
    • Viewbox
    • GoogleMap
    • Virtual earth
    • Change tracker
    • Binding comparer
    • Bootstrap
    • HTML Editor
  • Une library riche de class ou d’helper
    • CommandService
    • Deepzoom helpers
    • Mouse wheel listener
    • Various comparers
    • Google analytics
    • Browser history
  • 3 Players skinable générique
    • Deepzoom
    • Video
    • Photo

Un showcase sympathique est présent sur le site.

Silverlight Extension Showcase

source :

le blog de Pierre Lagarde

Alexandre Equoy

Be the first to rate this post

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


SilverLight 2 TOOLKIT Release

clock October 30, 2008 22:40 by author aequoy
En ces temps de PDC, la plateforme Codeplex vient enrichir SilverLight² avec de nouvelles fonctionnalités : Silverlight Toolkit
Le toolkit est téléchargeable sur codeplex
Bon code à toutes et tous.
Alexandre Equoy

Be the first to rate this post

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


Accès au données : Technet Tour Lyon

clock October 30, 2008 00:45 by author aequoy

Vous avez peut être suivi hier les sessions Microsoft du Technet tour sur Lyon, événement dans lequel Access it intervenait.

L'objectif de la session d'accès aux données était de faire un tour d'horizon des différentes technologies présentes sur le framework .Net 3.5SP1.

Cette session a été aussi l'occasion de rappeler qu'il n'y a pas de rupture entre ces différentes technologies, qu'elles s'appuient toutes sur ADO .Net et qu'elles ont toutes un objectif différent.

Toutes les démonstrations ont été faites sur la base Northwind téléchargeable sur le site de Microsoft.

La démonstration du framework entity montrait 2 manières d'attaquer le modèle :

- Entity au travers de E-SQL (Entity SQL) en utilisant les objets du provider

string connectionString = "metadata=res://*/NorthwindModel.csdl|res://*/NorthwindModel.ssdl|res://*/NorthwindModel.msl
;provider=System.Data.SqlClient;provider connection string=\"Data Source=MACHINE\\SQL2008_ENT;Initial Catalog=Northwind;Integrated Security=True\""
;

EntityConnection maConnexion = new EntityConnection(connectionString);

string MaRequete = "SELECT VALUE client from NorthwindEntities.Customers as client where client.City='London'";

EntityCommand maCde = new EntityCommand(MaRequete);

maCde.connection = maConnexion;

maConnexion.Open();

EntityDataReader monReader = maCde.ExecuteReader(CommandBehavior.SequentialAccess); while (monReader.Read())

{

this.listBox1.Items.Add(monReader["CustomerId"]);

}

- Linq To Entity

NorthwindEntities monModel = new NorthwindEntities();

var q = from c in monModel.Customers

where c.City == "London"

select c;

this.dataGridView1.DataSource = q;

La démonstration d'ADO .Net DataServices, de la même manière illustrait 2 possibilités de requêtage :

- En utilisant directement une URI et en créant manuellement la requête

string connexionString = "http://localhost:55464/NorthwindWebDataService.svc/";

NorthwindEntities monService = new NorthwindEntities(new Uri(connexionString));

DataServiceQuery<Customers> maRequete =monService.CreateQuery<Customers>("Customers");

foreach (var item in maRequete)
{

this.listBox1.Items.Add(item.CompanyName);

}

- En utilisant Linq To ADO .Net DataServices.

string connexionString = "http://localhost:55464/NorthwindWebDataService.svc/";

NorthwindEntities monService = new NorthwindEntities(new Uri(connexionString));

var q = from c in monService.Customers

where c.City == "London"

select c;

this.dataGridView1.DataSource = q.ToList();

Une première remarque que l'on peut se faire est que Linq est devenu comme prévu un langage de requêtage universel au sein des technologies d'accès aux données.
Une 2ème réflexion concerne la capacité de Linq à factoriser le code nécessaire à résultat identique.

Beaucoup de développeurs se posent actuellement la question : Quelle technologie utiliser ? A leur grand désarroi, la réponse ne peut être directive. ADO .Net a toujours son utilité, de même que connaître SQL fait toujours partie des connaissances du développeur. Il est d'ailleurs possible d'utiliser plusieurs technologies sachant que toutes sont des surcouches d'ADO .Net.

Je pense qu'il faut voir LinqToSQL comme un énorme accélérateur de création de couche d'accès au données (et en aucun cas comme un mappeur).

Le framework Entity quant à lui concerne des architectures où l'indépendance entre le modèle de stockage et le modèle objet est une priorité importante. Mettre en place un mappeur sert essentiellement dans des problématiques où le mapping 1 pour 1 n'est pas souhaité(dans le cas contraire, essayez de regarder du côté de LinqToSQL si vous êtes sur SQL Server).

Quant à ADO .Net DataServices, il prend son sens dans les annonces récentes de cloud computing, Windows Azure, des applications Ajax, du renouveau de l'orienté service...

Si vous êtes dans le coin de Lille le 6 novembre 2008, vous pourrez discuter avec des experts sur le sujet au cours de notre club .net. A noter la participation du maître Mitsu Furuta de retour de la PDC. Entity, LinqToSQL, Ado .Net Data Services et NHibernate seront des sujets abordés.

La présentation à télécharger :

Accès aux données - MTT08.zip (1,39 mb)

Pour ceux qui sont à la recherche de documentations concernant le framework entity, Ado .Net Data Services et Linq :
http://blogs.msdn.com/adonet/default.aspx
http://msdn.microsoft.com/en-us/library/aa697427(VS.80).aspx
http://blogs.msdn.com/data/
http://blogs.msdn.com/astoriateam/

http://blogs.msdn.com/mitsufu

Un article de la msdn qui parle de la gestion des transactions sur le framework entity :

http://msdn.microsoft.com/en-us/library/bb738523.aspx

Alexandre Equoy 

Be the first to rate this post

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