C#/Java et Turbo ASM

quand on compile du code Java on produit un byte code qui est ensuite execute/compile/jitcompile/ sur la machine de l’hote…
(et le premier qui me dit « oui mais nan, on trouve des vrais compilo tout ca » a le droit de rien dire : Java, c’est pas fait pour ca ! :stuck_out_tongue: )

jusque la vous me suivez…

et C# ? c’est du compile (x86 en dur tout ca) ou c’est du bytecode execute dans une C#VM ???

marci !

J’avais vu un cours a Teched ou le mec montrait du MSIL et c’etait etonament joli. J’avais ete super surpris comme c’etait propre comme truc. J’y ai passe 15 minutes a matter son truc donc c’est vraiment qu’une premiere impression et je peux me plante mais si tu veux te plonger jusque la tu peux te faire plaisir a mon avis. C’est cense etre classe.

cooool ! :slight_smile:

Tu veux savoir si tu peux ecrire du bytecode .net directement ? du MSIL a l’arrache?
Oui tu peux. Y a meme un decompilateur fournit en std si je me souviens bien.

bon et maintenant ma vrais question !!! :
est-ce que (comme en x86, ET en java) on peut ecrire en assembleur ?? enfin, en asm, en bytecode quoi ?

C’est surtout une question d’interpretation. La position officielle de MS c’est que .Net n’est pas une virtual machine dans le sens ou MSIL (le byte code .net) est proche du langage machine qui est dessous et ou tout n’est pas abstrait. Rendre du byte code independant de l’architecture et de l’OS sur lequel il tourne demande beaucoup plus d’abstraction et de couches pour abstraire tout le bordel qu’il n’y en a en .Net. Du coup les performances n’ont rien a voir, mais il est plus difficile de porter C# sur d’autres Os/Archi sans reecrire des gros gros bouts de l’interpreteur/JIT Compileur .Net. C’est loin d’etre infaisable cela dit. Maintenant tu peux trouver plein d’articles sur le net qui disent que .Net marche avec une machine virtuelle simplement parceque il y a un bytecode. Mais sur ce coup la je rejoins la position de Microsoft. D’abord pour le coup des niveaux d’abstractions et ensuite parceque le bytecode s’integre intimement dans l’OS, il n’y a pas comme en java, un process qui se fait lancer pour interpreter/JIT compiler le byte code. C’est en partie integre au kernel. Et c’est aussi pour ca que ca trace plus.

Il est aussi marrant de noter que Java n’est pas un standard. C’est a dire que personne ne peut ecrire un compilo Java sans payer des sous a Sun. Personne ne peut faire des modifs a Java sans en rapporter a Sun, comme MS l’a compri en perdant son proces contre SUN. En revanche C# est un standard depose aupres de l’ECMA et en cours d’etude a ISO. Du coup C# n’appartient plus a MS et n’importe qui peut ecrire un compilo C#, ou proposer des modification a l’ECMA ou ISO qui sont maintenant en charge des evolutions du langage. Bien sur MS a son mot a dire mais ils ne peuvent pas mettre un proces a quiconque parceque ils ont abandonne ce droit en faisant de C# un standard officiel. Enfin moi ca me fait marrer. Mais je suis un sale geek donc je ris de conneries parfois :slight_smile: :wink:

Effectivement, je suis d’accord avec toi Glop, l’avantage de .NET, c’est que l’on peut choisir son langage, c’est très pratique losque lon développe déjà en VB, en C++ ou en Perl de ne pas réaprendre une nouvelle syntaxe.
Tient, si tu as le temps, tu pourrais expliquer clairement ce qu’implique un machine virtuelle car je n’ai pas compris le fait que .NET fourni du bytecode mais qu’il n’y a pas de machine virtuelle.

En fait c’est du bytecote, y a un JIT compiler mais y a pas de machine virtuelle donc ca va plus vite que Java. Il est 3h30 du mat donc je rentre pas dans le detail mais une machine virtuelle ca abstrait plein plein de choses, ca veut pas juste dire un truc qui compile a la volee du bytecode et qui fait du garbage collection. Ca va plus loin que ca.

L’avantage du bytecode C# c’est qu’il est multilangage aussi. En fait c’est du bytecode .net. Du Perl.net ou du VB.Net compile donnera le meme bytecode et en prenant le bytecode compile en C# on peut heriter des classes en Perl.Net ou Ruby.Net ou autre. C’est un des ENORMES avantages de la plateforme .net. On peut choisir le meilleur langage pour la tache a accomplir et produire les meme binaires, heriter des meme classes et tout ca de maniere transparente.

Pour moi, c’est entre les deux, car c’est compilé et ca tourne plus vite que du java mais il faut quand même la plateforme .NET qui correspond a une machine virtuelle.

Donc voila, Glop poura surement t’en dire plus, je pense.