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

Langages de programmation Discussion :

Question simple mais piège


Sujet :

Langages de programmation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Avatar de wafiwafi
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    500
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 500
    Par défaut Les compilateurs produisent un fichier binaire
    Voila une question qui m'a été posée et j'aimerais la partager avec vous.
    Les compilateurs des langages produisent un fichier binaire. Comment ces informations arrivent jusqu'au microprocesseur?
    Eh oui, un curieux a osé posé cette question. Il a le droit!
    Ma réponse était très brève:
    Le fichier produit par le compilateur est pris en charge par le système d'exploitation qui a déjà préparé le terrain pour distribuer les signaux binaires aux différentes cartes et donc au processeur.

    On a riposté pour me dire: Mais alors que se passe t- il si le langageA est écrit en un autre langageB?
    Ma réponse est: HUUUM, ou bien le compilateur se charge de toutes les traductions (super compilateur) jusqu'aux codes binaires, ou bien le compilateur A traduit les infos en un langageB, puis le compilteur B traduit en codes binaires.

    Réagissez, si vous avez des choses à rajouter pour rendre les réponses plus claires; je n'ai pas pu faire mieux.

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 398
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 398
    Par défaut
    Que veux-tu dire par "le langageA est écrit en un autre langageB" ?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre éclairé
    Avatar de wafiwafi
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    500
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 500
    Par défaut Dans Java, il y a du C par exemple.
    Dans Java, il y a du C par exemple.

    Langages intermédiaires

    Certains langages appartiennent en quelque sorte aux deux catégories (LISP, Java, Python, ..) car le programme écrit avec ces langages peut dans certaines conditions subir une phase de compilation intermédiaire vers un fichier écrit dans un langage qui n'est pas intelligible (donc différent du fichier source) et non exécutable (nécessité d'un interpréteur). Les applets Java, petits programmes insérés parfois dans les pages Web, sont des fichiers qui sont compilés mais que l'on ne peut exécuter qu'à partir d'un navigateur internet (ce sont des fichiers dont l'extension est .class).

  4. #4
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 398
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 398
    Par défaut
    Dans Java, il y a du C
    Développe. Parles-tu du fait que la JVM soit implémentée en C, ou du fait qu'en java on puisse appeler des bibliothèques C (via JNI) ?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Membre éclairé
    Avatar de wafiwafi
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    500
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 500
    Par défaut Non je parle de la JVM.
    Non je parle de la JVM.
    Qu'en penses tu de la réponse fournie?

  6. #6
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 398
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 398
    Par défaut
    Aucune des deux réponses n'est bonne.

    Au moment où tu télécharges la JVM sur un PC 32 bit, elle n'est plus en C ou un autre langage de haut niveau: Elle est en codes binaires pour x86, puisqu'elle a déjà été compilée par Sun.
    Pour le bydecode java qu'on y injecte, deux méthodes:
    • Ancienne méthode, l'interprétation: Les octets du bytecode sont lus par la JVM, qui fait un gros switch() dessus et agit.
    • Méthode actuelle, compilation just-in-time: La version x86 de la JVM traduit le bytecode java pour toute la méthode (voire une échelle plus grande, genre toute la classe) en codes binaires pour x86, puis "appelle" ce code.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  7. #7
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 398
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 398
    Par défaut
    En clair, quand un fichier binaire exécutable est chargé par l'OS, celui-ci se moque de (et ne peut pas) savoir dans quel langage était le programme avant compilation. Tout ce qu'il voit, c'est un fichier avec un en-tête prévu pour l'OS (avec entre autre, une table d'importation de fonctions de DLLs) et des codes pour le processeur (dans le cas d'un PC 32 bits, les codes x86).
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  8. #8
    Membre éclairé
    Avatar de wafiwafi
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    500
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 500
    Par défaut les langages convergent vers le même code exécutable
    Évidement, dans le fichier binaire il n'y a pas de trace sur le langage de départ puisque tous les langages convergent vers le même code exécutable.
    En fait, je vois tout cela comme une grande réaction en chaine. des signaux attaquent des composants qui créent d'autres signaux pour attaquer d'autres composants ect.... (Merci au codage et surtout un grand merci aux portes logiques ...).

    Je trouve qu'actuellement les développeurs ne s'aventurent pas à aller voir ce qui se passent au bas niveau. C'est vraiment dommage. cela pourrait éviter bien de problèmes , par anticipation, lors du développement. Enfin bref.

    Si tu as deux secondes à nous consacrer :
    je n'ai pas encore développé en d'autres langages objet que JAVA. Les choses se passent il de la même manière après compilation dans les autres langages?

  9. #9
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 398
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 398
    Par défaut
    Personnellement, je me rappelle vaguement avoir vu une fois comment marchait un registre avec des bascules JK, mais je descend rarement en dessous du niveau du registre, y compris dans un processeur virtuel sur lequel je bosse à mes heures perdues.

    Pour ton autre question, ça dépend des langages:
    • Le langage C++ est entièrement compilé, et il me semble que c'est le cas aussi pour Fortran et Delphi.
    • L'ancien Visual Basic (VB6) était du semi-interprété sans JIT (comme l'ancien java).
    • Les langages destinés au Framework .Net se comportent comme le java moderne:
      Chaque langage (C#, C++/CLI, F#, Delphi.Net, VB.Net, J#) est compilé en bytecode CIL (différent du bytecode java, et apparemment d'un niveau un peu plus élevé vu qu'il était dès le début prévu pour du JIT), et le programme est JIT-compilé par le Common Language Runtime (CLR), qui remplit le même rôle que la JVM.
    • Il existe aujourd'hui de nombreux langages de script orientés objet. Il me semble que la plupart sont toujours interprétés (comme javascript), mais certains sont semi-interprétés comme VB6.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  10. #10
    Membre éclairé
    Avatar de wafiwafi
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    500
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 500
    Par défaut Merci, tout est clair.
    Merci, tout est clair.
    Quand je disais que les développeurs doivent de temps en temps descendre un peu au bas niveau, c'est par ce qu'il arrive qu'ils aient besoin de capter des informations d'une carte géré par microprocesseur comme par exemple des applications qui reposent sur l'acquisition des données provenant d'un capteur ou d'un microcontroleur. En fait, pour moi, ils doivent toucher ne serait ce qu'un peu en informatique industriel et donc comme je disais le bas niveau.
    certes, tous les développeurs ne vont pas avoir affaire à acquérir des signaux! Mais bon, je me trompe peut être.
    En tout cas un grand merci à toi; j'ai appris beaucoup de choses et d'autres personnes lisant cette discussion en témoigneront certainement.

  11. #11
    Membre éclairé
    Avatar de wafiwafi
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    500
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 500
    Par défaut
    Avec un peu de recul, il y a un truc que je n'ai pas compris :
    Méthode actuelle, compilation just-in-time: La version x86 de la JVM traduit le bytecode java pour toute la méthode (voire une échelle plus grande, genre toute la classe) en codes binaires pour x86, puis "appelle" ce code.
    Quand tu as dis :

    La version x86 de la JVM traduit le bytecode java pour toute la méthode (voire une échelle plus grande, genre toute la classe
    De quelle méthode s'agit-il? et de quelle classe s'agit il?
    Tu as raisonné "objet", et il y a un truc que j'ai zappé.
    Pourrais tu éclairer mes lanternes.
    Bien à toi

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

Discussions similaires

  1. question très simple mais je ne m'en souvient plus
    Par jbggg dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 10/11/2009, 15h04
  2. [1.x] Question simple sur les slots, mais qui me bloque !
    Par Adesfire dans le forum Symfony
    Réponses: 4
    Dernier message: 26/08/2009, 16h25
  3. Réponses: 12
    Dernier message: 29/04/2008, 00h42
  4. Question simple mais vitale : index unique
    Par Commandant dans le forum Sybase
    Réponses: 2
    Dernier message: 20/12/2006, 20h08
  5. Question simple sur les threads :)
    Par momox dans le forum C++Builder
    Réponses: 2
    Dernier message: 15/06/2003, 04h13

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