C'est ça. Sauf que la représentation intermédiaire n'est pas toujours totalement agnostique.
Celui de llvm est particulièrement bien documenté (pour un langage intermédiaire), c'est parce qu'il est considéré comme une interface du compilateur (alors que gcc considère ça comme une représentation interne). Un petit peu de lecture : https://en.wikipedia.org/wiki/LLVM#LLVM_intermediate_representation
C'est ce à quoi je m'attendais.
Pour moi, un compilateur c'est une fonction qui prend en entrée un texte écrit dans un langage et qui renvoie un texte écrit dans un autre, tout en préservant certains invariants dont le plus important est la sémantique du code. En gros : c'est un morphisme avec certaines propriétés qui sont propres aux compilateurs.
Dans les faits, pour écrire ce morphisme, on le décompose en fonctions distinctes et séparées aux rôles spécifiques, et on l'obtient par composition. Que certains groupes de fonctions se nomment backend et frontend (voire middle-end d'après la réponse de lasher) était le sens de ma question initiale. Cela semble relever du vocabulaire du génie logiciel, soit de l'ingénierie, vocabulaire que je ne connais pas spécialement.
Après, une représentation intermédiaire, pour moi, c'est juste le domaine d'arrivée (puis de définition) d'une des fonctions qui composent le compilateur. Dans des compilateurs comme GCC ou LLVM, qui prennent une multiplicité de langage sources en entrée et une multiplicité d'architectures cible en sortie, il faut bien à un moment donnée un langage commun, pivot; ce qui semble être le rôle du langage succinctement décrit, pour LLVM, dans le lien wikipédia que tu as donné.
Si si c'est juste que tes postes volent trop haut pour quand je suis en vacances ^ ^
Arf désolé, j'essayes de me retenir pourtant et je ne pensais pas que celui-ci volait si haut que cela. La conférence de la vidéo est surtout une conférence d'histoire de la logique et de l'informatique théorique au cours du XXème siècle. Je l'ai trouvé sur la page history of logic and programming languages sur le site de Philipp Wadler. Mais si j'en juges à la note de mon commentaire, la science et l'histoire des sciences ne semblent pas intéresser grand monde ici, à moins (ce qui est sans doute plus probable) que ce ne soit mon sens de l'humour qui ne fasse rire que moi.
Dans le même genre (compilation et histoire), il y a l'article (de vulgarisation, rien de bien théorique ni de très pointu dedans) la comptine des neufs divisions sur le site images des maths du CNRS. Son chapeau est :
Les calculateurs chinois ont fait usage d’une « table de division » qui, tirée de son contexte, peut sembler mystérieuse. Mais tout s’éclaire aussitôt qu’on la lit comme une liste d’instructions pour le boulier.
Il parle d'une comptine que les enfants chinois apprenaient pour pratiquer la division sur un boulier, qui n'est autre qu'un algorithme de division pour un machine (non automatisée) avec un nombre de registres limités, plus connu sous le nom de : boulier. :-)
boulier
Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.
[^] # Re: Dommage alors
Posté par kantien . En réponse au journal LLVM se fait de vieux os ? La recherche pour rester jeune.. Évalué à 2.
C'est ce à quoi je m'attendais.
Pour moi, un compilateur c'est une fonction qui prend en entrée un texte écrit dans un langage et qui renvoie un texte écrit dans un autre, tout en préservant certains invariants dont le plus important est la sémantique du code. En gros : c'est un morphisme avec certaines propriétés qui sont propres aux compilateurs.
Dans les faits, pour écrire ce morphisme, on le décompose en fonctions distinctes et séparées aux rôles spécifiques, et on l'obtient par composition. Que certains groupes de fonctions se nomment backend et frontend (voire middle-end d'après la réponse de lasher) était le sens de ma question initiale. Cela semble relever du vocabulaire du génie logiciel, soit de l'ingénierie, vocabulaire que je ne connais pas spécialement.
Après, une représentation intermédiaire, pour moi, c'est juste le domaine d'arrivée (puis de définition) d'une des fonctions qui composent le compilateur. Dans des compilateurs comme GCC ou LLVM, qui prennent une multiplicité de langage sources en entrée et une multiplicité d'architectures cible en sortie, il faut bien à un moment donnée un langage commun, pivot; ce qui semble être le rôle du langage succinctement décrit, pour LLVM, dans le lien wikipédia que tu as donné.
Arf désolé, j'essayes de me retenir pourtant et je ne pensais pas que celui-ci volait si haut que cela. La conférence de la vidéo est surtout une conférence d'histoire de la logique et de l'informatique théorique au cours du XXème siècle. Je l'ai trouvé sur la page history of logic and programming languages sur le site de Philipp Wadler. Mais si j'en juges à la note de mon commentaire, la science et l'histoire des sciences ne semblent pas intéresser grand monde ici, à moins (ce qui est sans doute plus probable) que ce ne soit mon sens de l'humour qui ne fasse rire que moi.
Dans le même genre (compilation et histoire), il y a l'article (de vulgarisation, rien de bien théorique ni de très pointu dedans) la comptine des neufs divisions sur le site images des maths du CNRS. Son chapeau est :
Il parle d'une comptine que les enfants chinois apprenaient pour pratiquer la division sur un boulier, qui n'est autre qu'un algorithme de division pour un machine (non automatisée) avec un nombre de registres limités, plus connu sous le nom de : boulier. :-)
boulier
Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.