>> Un compilateur est un outil qui permet de traduire un code source, intelligible par un humain, en un code objet, directement traitable par une machine. Quelle soit virtuelle ou physique d'ailleurs.
Double pas d'accord.
Un compilateur, c'est un transducteur qui préserve la sémantique.
D'une part, tu as des compilateurs qui prennent en entrée du code inintelligible pour un humain, qui a pu être généré par une application graphique (comme des descriptions de hardware), pour générer par exemple du VHDL.
On peut aussi compiler vers une machine (et pas vers un langage qui tourne sur une machine) : j'ai un ancien pote de labo qui compilait (juste-à-temps) du Scheme vers du FPGA.
D'autre part, je peux aussi affirmer que « GCC est une machine » qui sait directement traiter le code généré par Gambit-C.
Et ton code objet, c'est quoi ?
Dans ta vision réductrice, c'est juste un langage qui est à son tour interprété (par un machine). Donc si je transforme du Scheme en javascript (langage qu'on peut évaluer), alors j'ai bien compilé. Puis du javascript en Scheme (langage qu'on peut évaluer), alors j'ai encore compilé. Par composition, transformer du Scheme en Scheme, c'est compiler. Or, transformer du Scheme en Scheme, c'est aussi traduire.
Je conclus donc, malgré tes contraintes, que traduction et compilation ne sont pas indissociables.
[^] # Re: Pas une super definition...
Posté par Axioplase ıɥs∀ (site web personnel) . En réponse à la dépêche Conférence Parinux : "le compilateur GCC : développements récents, greffons et outil MELT". Évalué à 3.
Double pas d'accord.
Un compilateur, c'est un transducteur qui préserve la sémantique.
D'une part, tu as des compilateurs qui prennent en entrée du code inintelligible pour un humain, qui a pu être généré par une application graphique (comme des descriptions de hardware), pour générer par exemple du VHDL.
On peut aussi compiler vers une machine (et pas vers un langage qui tourne sur une machine) : j'ai un ancien pote de labo qui compilait (juste-à-temps) du Scheme vers du FPGA.
D'autre part, je peux aussi affirmer que « GCC est une machine » qui sait directement traiter le code généré par Gambit-C.
Et ton code objet, c'est quoi ?
Dans ta vision réductrice, c'est juste un langage qui est à son tour interprété (par un machine). Donc si je transforme du Scheme en javascript (langage qu'on peut évaluer), alors j'ai bien compilé. Puis du javascript en Scheme (langage qu'on peut évaluer), alors j'ai encore compilé. Par composition, transformer du Scheme en Scheme, c'est compiler. Or, transformer du Scheme en Scheme, c'est aussi traduire.
Je conclus donc, malgré tes contraintes, que traduction et compilation ne sont pas indissociables.