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.
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).
Il y a eu tout de même compilation.
Citation:
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.
Au début il y avait du c . Sun a compilé puis le fichier binaire est prêt.
Il y a eu tout de même compilation.
J'essaye de comprendre
Merci pour la clarté du message.
Merci pour la clarté du message.
Si j'ai bien compris, l'os place dans le registre IP du processeur l'adresse de l'instruction à exécuter et évidement par incrémentation, on passe d'une instruction à une autre . L'os est également présent pendant l'exécution pour gérer les processus. Je ne parle pas des interruptions puisqu'elle peuvent être réalisées en hard.
L'os est en quelque sorte un convoyeur! mais également un contrôleur (bus d'adresse + bus de contrôle et donc automatiquement par le biais du codage le bus de données).
Les choses ont été mises à leurs places.
En tout cas, merci à toi.
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?
Le JIT optimise les temps d'exécution, certes.
j'ai très bien compris. Merci.
Le JIT optimise les temps d'exécution, certes.
La compilation à la volée nécessite notamment pour la deuxième méthode que tu as citée, des accès mémoires répétitives (peut être plus que la compilation classique). En plus, à l'instant t, il n' y a pas que le processus de la méthode appelée qui doit avoir lieu mais également la tâche de la compilation à la volée.
Logiquement, et j'ai tord certainement puisque le JIT a fait ses preuves, tout cela constituent des freins. J'aurais raisonné en disant qu'il vaut mieux tout compiler d'un seul coup et lors de l'exécution, il n'y aura pas de tâche supplémentaires. C'est assez trompeur.
Portabilité et Sécurité d'abords!
Portabilité et Sécurité d'abords!
Merci beaucoup.