IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 .NET Discussion :

le bytecode du c# interprété par une JVM [C#]


Sujet :

.NET

  1. #1
    Nouveau membre du Club
    Inscrit en
    Avril 2011
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 52
    Points : 38
    Points
    38
    Par défaut le bytecode du c# interprété par une JVM
    Bonjour,
    un programme écrit sous C# est transformé en CIL après sa compilation c'est à dire sous forme d'un bytecode , on m'a dit que le CIL ou MSIL est portable mais il faut que le CLR soit implémenté sur la machine pour qu'il soit interprété
    ma question est : ce bytecode généré, peut-on l'exécuter sur une machine virtuelle JVM ou non ? et pourquoi pas ?
    car une JVM interprète le bytecode non ?
    merci beaucoup

  2. #2
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 192
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 192
    Points : 28 073
    Points
    28 073
    Par défaut
    LA CLR est exactement l'équivalent de la JVM. Les 2 sont des machines virtuelles qui transforme un bytecode en instructions exécutables sur une plateforme dédiée

    La JVM interprète et exécute du bytecode Java, la CLR interprète et exécute du bytecode .Net appelé aussi IL ou MSIL.

    Je ne pense pas que la JVM soit capable d’interpréter nativement du code IL, de même que la CLR n’interprète pas du bytecode java
    --- Sevyc64 ---

    Parce que le partage est notre force, la connaissance sera notre victoire

  3. #3
    Nouveau membre du Club
    Inscrit en
    Avril 2011
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 52
    Points : 38
    Points
    38
    Par défaut
    Merci beaucoup pour l'explication claire,
    je croyais que le bytecode c'est du code comme le binaire , c'est à dire compréhensible par toutes les machines (ici la JVM) , je ne savais pas qu'il existait des bytecode java et des bytecode .NET
    d'après wikipédia :" Il est contenu dans un fichier binaire "
    mais je comprends pas comment peut - il être codé en binaire sans être copréhensible par la machine, c'est un peu flou pour moi

  4. #4
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 177
    Points : 4 489
    Points
    4 489
    Par défaut
    binaire ca ne veut rien dire.
    le bytecode c'est des fichier binaire contrairement au sources qui sont des fichier text.
    mais ce code binaire est ensuite interpreté par la JVM et traduit en instruction machine.
    Comme un fichier word est un fichier binaire et est interpreté par word pour t'afficher un texte lissible.

    ps : un fichier texte est aussi un fichier binaire mais son code ne fait que representer des caractères alphanumériques.
    Je ne suis qu'un pauvre débutant alors ne frappez pas si mes idées ne sont pas bonnes

  5. #5
    Nouveau membre du Club
    Inscrit en
    Avril 2011
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 52
    Points : 38
    Points
    38
    Par défaut
    Merci pour ta réponse,
    J'ai compris maintenant que le bytecode est un fichier binaire qui ne s'exécute pas directement sur l'ordinateur mais il lui faut une JVM correspondante pour pouvoir l'exécuter. mais ce que je comprends pas maintenant c'est
    la portabilité de C# par rapport à C et C++
    C et C ++ : il faut recompiler le code source sur la nouvelle plateforme pour pouvoir l'exécuter
    C# : il faut une JVM compatible pour pouvoir exécuter le bytecode généré (MSIL ou CIL)
    je ne vois pas d'avantage ou de portabilité
    par contre , je sais que grâce au CLR , l'exécution du code est plus sécurisée que le C/C++ (puisque la mauvaise manipulation des pointeurs peut causer des problème sur la machine ), de plus le JIT debugger qui permet de générer visual studio si un problème intervient dans un programme .NET

  6. #6
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 192
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 192
    Points : 28 073
    Points
    28 073
    Par défaut
    Alors C# n'utilise pas la JVM mais la CLR

    Comme pour java, la portabilité est assurée (en théorie tout au moins) par le fait que le code source n'a pas besoin d'être recompilé sur chaque plateforme. Le bytecode produit à la compilation est censé fonctionné sur toutes les plateformes.

    Bien entendu, il faut une machine virtuelle (JVM pour Java, CLR pour .Net) adaptée à chaque plateforme. Mais elle ne s'installe qu'une seule fois, il n'y a pas besoin de la recompiler à chaque fois.
    Quand au bytecode, il est compilé en temps réel par la machine virtuelle lors de l’exécution, il n'y a pas besoin de recompiler à chaque fois.

    Pour ce qui est de la réalité, tant que les programmes restent dans des utilisations génériques, la portabilité doit pouvoir être assurée, mais évidement s'ils font appel à des particularités spécifique à un os en particulier, la portabilité n'est plus assurée.

    Personnellement, je n'ai jamais réellement testé la portabilité d'un code, que ce soit en C# ou en Java. Je ne sais donc pas si ça marche réellement
    --- Sevyc64 ---

    Parce que le partage est notre force, la connaissance sera notre victoire

  7. #7
    Nouveau membre du Club
    Inscrit en
    Avril 2011
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 52
    Points : 38
    Points
    38
    Par défaut
    Citation Envoyé par sevyc64 Voir le message
    il faut une machine virtuelle (JVM pour Java, CLR pour .Net) adaptée à chaque plateforme. Mais elle ne s'installe qu'une seule fois, il n'y a pas besoin de la recompiler à chaque fois.
    Quand au bytecode, il est compilé en temps réel par la machine virtuelle lors de l’exécution, il n'y a pas besoin de recompiler à chaque fois.
    Oui je vois maintenant une sorte de portabilité .

    En ce qui concerne C#, il existe une CLR basique pour linux qui s'appelle Mono , qui n'est pas complète bien évidemment
    ceci veut dire que si le programme comporte des fonctionnalités non couvertes par Mono , il pourra pas fonctionner

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Fonctionnalités fournies par une JVM côté serveur
    Par Torx26 dans le forum Développement Web en Java
    Réponses: 1
    Dernier message: 25/05/2012, 11h34
  2. Assembleur généré par une JVM
    Par Supersami2000 dans le forum Assembleur
    Réponses: 2
    Dernier message: 06/10/2011, 17h13
  3. Liste des ciphers TLS/SSL supportés par une JVM ?
    Par flatplane55 dans le forum Général Java
    Réponses: 0
    Dernier message: 24/03/2010, 16h37
  4. Réponses: 1
    Dernier message: 25/09/2009, 12h03
  5. [JVM]connaitre la quantité mémoire consomé par une image.
    Par Higestromm dans le forum Général Java
    Réponses: 3
    Dernier message: 12/05/2005, 12h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo