human
Comment fonctionne la programmation sur le matériel ? Je veux dire, toute la programmation que j'ai faite jusqu'ici est en java et C#, mais comment font-ils pour que tous ces mots que j'écris soient compris par le matériel ? Explique comme si j'avais cinq ans.
gpt
* * En bref :* * Le compilateur le fait pour vous. Il traduit vos mots -- qui suivent déjà certaines règles pour être compris par votre compilateur -- en quelque chose que le matériel sous - jacent peut comprendre . * * Un peu moins court :* * Votre code source est généralement prétraité en un code source modifié. Ce code source modifié contient déjà quelques " machinisations " ( juste quelques simplifications vers la machine et le processus de compilation ) . Un compilateur crée un code en langage assembleur (passant ainsi d'un langage de haut niveau à un langage assembleur tel que x86 ASM). À ce niveau, vous voyez des opérations basées sur des registres au lieu de variables et d'objets. Le code du langage assembleur est " assemblé " dans un code machine ( assemblage " lisible " décodé en séquences de nombres illisibles ) . Le code machine doit encore être arrangé et lié aux bibliothèques que vous utilisez. Cela se fait par un éditeur de liens et un chargeur ( en C # , vous avez parfois des dll qui correspondent essentiellement à cela ) . L'éditeur de liens et le chargeur s'occupent de mettre le code machine arrangeable dans le bon ordre pour la machine sous-jacente. Le résultat final sera le code machine dans le langage machine pur composé des séquences de nombres que le processeur lit à partir d'une mémoire octet par octet (parfois deux octets ou plus mais c'est un sujet différent). * * Une remarque complémentaire :* * J'ai parlé des langages de compilateur ( assez généralement ) ici . Il existe aussi des langages interpréteurs purs comme Python ou des langages mixtes comme Java. Ceux-ci fonctionnent un peu différemment mais le principe sous-jacent utilise des techniques similaires au niveau de la machine. Pour les langages d'interprétation, nous avons un interpréteur qui interprète littéralement votre code source ligne par ligne et exécute immédiatement les opérations au niveau du système. Cela nécessite que ces opérations soient écrites et respectées une seule fois pour être disponibles sur le langage de l'interpréteur. La magie s'y cache donc. Java d'autre part - à mon avis - fonctionne de manière intermédiaire avec quelques avantages supplémentaires. Nous avons notre code source qui est compilé à partir d'un fichier .java dans un fichier .class. Cette classe - File est le code java compilé dans un langage d' assemblage comme sur x86 _ mais _ pour la Java - Virtual - Machine ( jvm ) . Il contient un ensemble général d'opérations qui sont disponibles sur à peu près n'importe quelle machine. Le jvm d'autre part doit être créé pour chaque architecture elle-même. Vous avez donc une jvm pour x86 , une pour ARM , une pour amd64 , ... La jvm interprète directement l' ASM Java en instructions de code machine pour que le processeur soit interprété . Pour une lecture plus approfondie, je recommande des livres sur l'architecture informatique de Hennessy + Patterson ou Tanenbaum (enfin, en ce qui concerne l'ingénierie informatique / comp sci, ce gars de Tanenbaum apparaît partout, je pense ... il est génial :)). Des livres sur les systèmes d'exploitation donnent également un aperçu du fonctionnement de la couche entre l'utilisateur et le processeur. Plus précisément sur ce sujet, j'ai écrit sur ? L'auteur de Compilers : Principles, Techniques, and Tools (Aho, et al) plonge très très profondément dans ce sujet. Je ne l'exigerais pas mais je le nomme parce que c'est le livre qui couvre le plus ce sujet. Les autres que j'ai mentionnés sont des livres standard sur les sujets que j'ai mentionnés. * * EDIT : * * Formatage et mots . -- De plus ma note est plus longue que mon message réel lol * * Deuxième note : * * Chaque compilateur passe par des phases similaires dont je pourrais aussi parler et qui sont très intéressantes . Mais comme mentionné, Aho et al approfondissent ce sujet ;)