Page 24 sur 26

Re: Le coin des codeurs :nerd:

Publié : 28 mars 2022 15:59
par Tardigrade
Konino a écrit : 28 mars 2022 15:28 Le premier à avoir codé un compilateur, comment il l'a compilé?
Il l'a pas compilé, mais écrit directement en code machine.

Re: Le coin des codeurs :nerd:

Publié : 28 mars 2022 16:19
par Golden cube
En assembleur plutôt je dirais. C'est déjà un peu plus sympas :)

Re: Le coin des codeurs :nerd:

Publié : 28 mars 2022 16:37
par Tardigrade
Et qu'est-ce qui assemble ton code assembleur ? :)

Re: Le coin des codeurs :nerd:

Publié : 28 mars 2022 17:27
par nazlurf
toi, t'as jamais fait d'assembleur ... :mrgreen:

c'est des instructions tellement pourries, que ça se résume à prend l'octet là et mets le là, puis mets celui-là là ... tu donnes les instructions au processeur directement (et pour le coup, pour moi, assembleur = code machine, ou c'en est vraiment pas loin ... après, si qq1 me dit que je me trompe, je feindrai ma vieillitude et que la dernière fois que j'ai fait de l'assembleur, c'était il y a plus de 20 ans et parce qu'on m'y avait forcé)

Re: Le coin des codeurs :nerd:

Publié : 28 mars 2022 18:47
par Tardigrade
Ben si j'en ai fait.
Code assembleur = instructions processeur sous forme de texte (ex : movb $0x61,%al). Non lisible directement par le processeur, parce que c'est du texte.
Code machine = l'équivalent en binaire. Lisible par le processeur.
Assembleur = programme qui convertit les instructions texte en binaire.

D'où la question : comment on a codé le 1er assembleur ? Réponse : en code machine (i.e. en binaire).

Re: Le coin des codeurs :nerd:

Publié : 29 mars 2022 00:25
par Golden cube
Tu parles de compilateur à l'origine. L'assembleur ne se compile pas :nerd:
Et avant d'être capable de passer la barre du bootstrapping un compilateur est bien écrit en assembleur (pas toujours vrai de nos jour mais vu qu'on parle du premier compilo...)
Après faut pas confondre compilateur et assembleur :oscar:
Sinon autant remonter la chaine jusqu'à l'alternateur pour être safe :mrgreen:
Voire la création des éléments composant l'alternateur :nerdhum:

Re: Le coin des codeurs :nerd:

Publié : 29 mars 2022 01:21
par KirbyX
J'étais arrivé à comprendre le message de Tardigrade avec ses explications pour les teubés et t'as tout fait foirer golden... :cry:

Re: Le coin des codeurs :nerd:

Publié : 29 mars 2022 01:34
par Golden cube
Tout ce que je dis c'est que Tardigrade répond à la question comment on fait une omelette par 'avec une poule'. En disant au final qu'on se demandait comment faire des oeufs :baballe:
Fin bref... Désolé si c'est un peu rash je viens encore de passer une soirée à corriger la merde d'un énième presta expert en pipeau

Re: Le coin des codeurs :nerd:

Publié : 29 mars 2022 07:19
par Konino
Du coup je sais même pas si j'ai eu ma réponse. :oscar:

Re: Le coin des codeurs :nerd:

Publié : 29 mars 2022 08:50
par nazlurf
Tardigrade a écrit : 28 mars 2022 18:47 Ben si j'en ai fait.
Code assembleur = instructions processeur sous forme de texte (ex : movb $0x61,%al). Non lisible directement par le processeur, parce que c'est du texte.
Code machine = l'équivalent en binaire. Lisible par le processeur.
Assembleur = programme qui convertit les instructions texte en binaire.

D'où la question : comment on a codé le 1er assembleur ? Réponse : en code machine (i.e. en binaire).
ok ... du coup, c'est pas le fabricant du processeur qui doit fournir l'assembleur ? Puisque ce sera dédié / dépendant du matériel ? Et donc, dans la logique, nvidia, intel et consorts doivent à chaque nouveau processeur réécrire le bouzin (bon, peut-être pas à chaque processeur, mais chaque famille / version des processeurs) ?

Re: Le coin des codeurs :nerd:

Publié : 29 mars 2022 09:08
par Tardigrade
Konino a écrit : 29 mars 2022 07:19 Du coup je sais même pas si j'ai eu ma réponse. :oscar:
Si tu parles juste de compilateur (langage haut niveau), Golden cube a raison : en assembleur.
Si ta question incluait aussi l'assembleur, ce qui a plus de sens selon moi, cf. ma réponse.

@nazlurf : J'ai pas les détails, si quelqu'un a la réponse, ça m'intéresse. :)

Re: Le coin des codeurs :nerd:

Publié : 29 mars 2022 09:17
par Golden cube
Konino a écrit : 29 mars 2022 07:19 Du coup je sais même pas si j'ai eu ma réponse. :oscar:
Vu que ta question c'était sur le premier compilateur : en assembleur.
En plus c'est partiellement faux vu que généralement tu développes la majorité d'un compilo dans le langage qu'il compile.
C'est le principe du bootstrapping : tu écris un compilateur très basique qui te permet de coder ses nouvelles fonctionnalités dans son propre langage.
Puis fait en couche d'oignon jusqu'à avoir la version finale.
De nos jours on passe plutôt par des compilateurs de compilateurs genre yacc ou bison.

Si tu veux la poule, les premiers assembleurs devaient être mécaniques vu qu'ils datent de la période des cartes à trous.
Mais pour un assembleur applicatif c'est un peu pareil que les compilos dans la philo, tu écris un bootstrap en code machine et le reste dans ton langage assembleur.

Re: Le coin des codeurs :nerd:

Publié : 29 mars 2022 09:19
par Konino
Ok merci. :)

Re: Le coin des codeurs :nerd:

Publié : 29 mars 2022 09:37
par Golden cube
Tardigrade a écrit : 29 mars 2022 09:08
Konino a écrit : 29 mars 2022 07:19 Du coup je sais même pas si j'ai eu ma réponse. :oscar:
Si tu parles juste de compilateur (langage haut niveau), Golden cube a raison : en assembleur.
Si ta question incluait aussi l'assembleur, ce qui a plus de sens selon moi, cf. ma réponse.

@nazlurf : J'ai pas les détails, si quelqu'un a la réponse, ça m'intéresse. :)
Vu que les jeux d'instructions sont assez standard (x86, ARM, ...) les assembleurs existent déjà en général.
Si tu veux rajouter de nouvelles instructions tu pars sur une base existante en assembleur.
Enfin du coup ça évolue pas trop et il n'y a pas besoin de sortir un assembleur pour chaque CPU.

C'est un peu plus dynamique au niveau des microcontrôleurs mais bon ce n'était pas le sujet.
Et oui en général le fabriquant de la puce te refile l'assembleur qui va bien en général à travers un soft maison.

Re: Le coin des codeurs :nerd:

Publié : 29 mars 2022 12:58
par Cyrare
Je suis d'accord avec Tardi.

Je ne trouve aucune définition d'un compilateur qui exclurait la conversion d'un code assembleur en fichier exécutable. Et donc, nécessairement, le premier compilateur a été créé dans un langage directement compréhensible par la machine, donc en binaire.

PAR CONTRE, ce premier compilateur a probablement été réfléchi en assembleur, écrit en assembleur, puis converti à la main en binaire, écrit en binaire. Et donc, c'est exactement ce qu'a dit Tardi et ça répond parfaitement à la question.

Re: Le coin des codeurs :nerd:

Publié : 29 mars 2022 14:20
par KirbyX
C'est quoi la différence entre un assembleur et un compilateur ? (une réponse en mode pour-les-teubés serait souhaitable :silly: )

Re: Le coin des codeurs :nerd:

Publié : 29 mars 2022 14:28
par nazlurf
un assembleur prend du code et l'assemble.
un compilateur prend du code et le compile :mrgreen:

blague à part, cf ce qui était décrit plus tôt. Le compilateur prend du code -plus ou moins- lisible pour un humain -averti- et le compile en code machine (ou code interprété, cela dépend du langage). L'assembleur, la grosse différence, c'est que le langage n'est pas lisible, c'est une série d'instruction bas niveau traduite 1 pour 1 en instructions machine. Là où une instruction compilée peut donner lieu à plusieurs centaines instructions machines (différentes selon les options de compilation), une instruction assembleur donne lieu à une instruction machine (ou une poignée d'instructions machine ? Je laisse les spécialistes de l'assembleur me corriger).

sous réserve que j'ai bien compris ce qui était écrit plus haut par nos camarades, puisque j'ai bien compris que mes restes d'assembleur sont bien trop lointain pour que mon cerveau m'en fasse une restitution fidèle (car j'étais un des moins nuls de ma promo à l'époque, j'me débrouillais quoi :mrgreen: mais ça, c'était avant !)

Re: Le coin des codeurs :nerd:

Publié : 29 mars 2022 14:53
par MectonLaFlemme
Cyrare a écrit : 29 mars 2022 12:58 PAR CONTRE, ce premier compilateur a probablement été réfléchi en assembleur, écrit en assembleur, puis converti à la main en binaire, écrit en binaire. Et donc, c'est exactement ce qu'a dit Tardi et ça répond parfaitement à la question.
J'ai des flashbacks d'exo qu'on devait faire à la fac d'info O_O
C'était à base de traduction en assembleur puis binaire d'algo simple, en mode "machine à ruban" / Turring.
J'ai aussi une grosse pensée aux correcteurs qui devaient se fader la relecture de nos copies papiers xD

(mais comme pour du code non-commenté aujourd'hui, je dis que si c'était chiant à écrire, alors ca doit être chiant à relire :evil: )

^^'

Re: Le coin des codeurs :nerd:

Publié : 29 mars 2022 17:09
par Golden cube
Cyrare a écrit : 29 mars 2022 12:58 Je suis d'accord avec Tardi.

Je ne trouve aucune définition d'un compilateur qui exclurait la conversion d'un code assembleur en fichier exécutable. Et donc, nécessairement, le premier compilateur a été créé dans un langage directement compréhensible par la machine, donc en binaire.

PAR CONTRE, ce premier compilateur a probablement été réfléchi en assembleur, écrit en assembleur, puis converti à la main en binaire, écrit en binaire. Et donc, c'est exactement ce qu'a dit Tardi et ça répond parfaitement à la question.
Justement le code généré par un compilateur est envoyé à un assembleur puis un linker au besoin.
C'est un suite d'appel à plusieurs exécutables qui va transformer ton code haut niveau en binaire.
De nos jours c'est tout packagé mais un compilo ne pisse pas du code machine...

Et le premier compilateur est arrivé bien après le premier assembleur.

Edit :
Pour finir la blague j'ai cherché viteuf :
The first compiler was written in assembly for the A-0 programming language in 1952.
Edit 2 pour nazlurf :
Le code assembleur et un assembleur c'est bien plus qu'une simple traduction d'opérateurs textuels en langage machine.
Cela simplifie à mort la gestion de l'adressage mémoire.
Par exemple un label ça t'évite de t'amuser à calculer à quelle adresse mémoire est chargé le morceau de code que tu veux exécuter. Tout ce qui est noms symboliques pour des adresses mémoire simplifie à mort le code par rapport à du langage machine.
Après c'est relativement lisible l'assembleur si tu prend la peine de regarder les opcodes.
Perso j'ai beaucoup plus de mal à lire du code haut niveau créé par des génis inconnus du design pattern #yolopasta que du code assembleur d'un mc dont je ne connais pas le jeu d'instruction :oscar:

Re: Le coin des codeurs :nerd:

Publié : 29 mars 2022 18:18
par Tardigrade
Juste pour clarifier, je dis pas qu'un compilateur c'est pareil qu'un assembleur. Juste que la question de Konino est plus intéressante si on inclut les assembleurs dedans. Sinon, on a envie de poser la même question pour les assembleurs. :wink:

Quelques liens pour creuser si ça intéresse quelqu'un :
https://stackoverflow.com/questions/165 ... er-written
https://en.wikipedia.org/wiki/Bootstrap ... mpilers%29
https://en.wikipedia.org/wiki/History_o ... nstruction

:mrgreen:
Image

Re: Le coin des codeurs :nerd:

Publié : 29 mars 2022 18:27
par Golden cube
Moi je disais juste que quand tu disais qu'un compilateur était codé en langage machine c'était faux :mrgreen:
Tu aurais mentionné l'assembleur dans ton premier post je n'aurais pas tiqué :oscar:

Re: Le coin des codeurs :nerd:

Publié : 31 mars 2022 23:38
par Le poussin
KirbyX a écrit : 29 mars 2022 14:20 C'est quoi la différence entre un assembleur et un compilateur ? (une réponse en mode pour-les-teubés serait souhaitable :silly: )
- Un compilateur traduit depuis un langage quelconque (en généralement sympa pour un humain) vers un langage que peut comprendre le CPU.
- L'assembleur retranscrit dans un format que peut manipuler le CPU (du binaire).

Pour faire une analogie avec les langages naturels. Si tu veux passer une histoire en français à un Italien aveugle.
- D'abord tu traduis le texte français en italien (compilateur).
- Ensuite tu retranscris le texte italien en braille pour que l'Italien puisse le lire.

Comme pour les langages naturels, tu vas perdre de l'information à la compilation (ex. annotations laissées par le développeur), mais l'histoire racontée sera la même. C'est un travail qui peut être compliqué.
De même que le braille est plus limité qu'un texte classique (où tu peux mettre de la mise en forme), le code machine en binaire est plus limité que l'assembleur. Mais si tu connais l'alphabet braille, tu peux passer de l'un à l'autre assez facilement, sans trop réfléchir.

Re: Le coin des codeurs :nerd:

Publié : 01 avr. 2022 00:45
par KirbyX
Merci !! :D
Je pense avoir compris la nuance.

Re: Le coin des codeurs :nerd:

Publié : 03 avr. 2022 10:25
par Mortal
Le poussin a écrit : 31 mars 2022 23:38
KirbyX a écrit : 29 mars 2022 14:20 C'est quoi la différence entre un assembleur et un compilateur ? (une réponse en mode pour-les-teubés serait souhaitable :silly: )
- Un compilateur traduit depuis un langage quelconque (en généralement sympa pour un humain) vers un langage que peut comprendre le CPU.
- L'assembleur retranscrit dans un format que peut manipuler le CPU (du binaire).

Pour faire une analogie avec les langages naturels. Si tu veux passer une histoire en français à un Italien aveugle.
- D'abord tu traduis le texte français en italien (compilateur).
- Ensuite tu retranscris le texte italien en braille pour que l'Italien puisse le lire.
Excellente analogie au passage.

Re: Le coin des codeurs :nerd:

Publié : 03 avr. 2022 19:06
par meduz'