• [^] # Re: Hmmm

    Posté par (Mastodon) . En réponse au journal L'oeuf ou la poule ?. Évalué à 10.

    (attention, je vais essayer d'expliquer un truc en étant théorique, c'est pas gagné)

    En fait, un ordinateur fonctionnel le plus simple possible est une machine de Turing, c'est à dire un ruban de papier (le "disque dur") et une tête de lecture (le "processeur") qui lit une lettre sur le ruban, et fait quelque chose de prédéterminé en fonction de la lettre qu'elle a lue, et de l'état dans lequel elle se trouve. Nos ordinateurs actuels sont des machines de Turing, mais de conception assez compliquée, et donc cet aspect n'est pas très visible.

    On pourrait donc, pour simplifier, poser ta question dans le cas des machines de Turing. Si j'ai un stylo, une bande de papier assez longue, et une tête de lecture qui marche, alors il suffit que j'écrive des instructions sur le papier dans un langage compréhensible par la tête de lecture. L'élément important ici, c'est que je dois avoir une tête de lecture qui sache interpréter mes instructions. Si je n'ai pas de tête de lecture (et que je ne peux pas en fabriquer une), mon papier et mon stylo ne servent à rien.

    Maintenant, revenons à notre ordinateur traditionnel. Si j'ai une mémoire de stockage, un moyen d'écrire dessus, et un processeur, alors il suffit que j'écrive dans la mémoire des instructions dans un langage compréhensible par le processeur. Mais là encore, je dois avoir un processeur en état de fonctionnement.

    Le problème de l'oeuf ou la poule tel que tu le vois, c'est "comment est apparu le premier compilateur, alors qu'on n'avait pas de compilateur pour l'écrire ?" Le premier "compilateur" (en fait un interpréteur) a été construit matériellement, pas programmé. La tête de lecture, ou le processeur, est un interpréteur de code. Et donc, avant de pouvoir écrire un programme "logiciel", on doit d'abord construire un interpréteur "matériel".

    Une fois ce premier pas effectué, on peut écrire un logiciel en "langage machine" destiné à l'interpréteur matériel. Ce logiciel sera probablement un "compilateur", parce que le langage machine est assez imbitable, donc par exemple on va coder un compilateur du C vers le langage machine. On aura:

    [Interpréteur matériel, processeur] <- [langage machine] <- [compilateur] <- [langage C]

    Le petit "déclic" pour comprendre comment ça marche est de se rendre compte que du point de vue logique, il n'y a pas de différence entre un interpréteur matériel et un interpréteur logiciel. Pour les gens qui sont à droite d'une flèche "<-", ce qu'il y a à gauche est indifférent, on est confronté à un langage, mais on ne sait pas si le truc qui comprend ce langage est construit avec du matériel ou pas. Par conséquent, seule la brique la plus à gauche de la chaine a besoin d'être matérielle.

    Voila voila, c'est compréhensible ?