• [^] # Re: Compile "plus de bruit"

    Posté par . En réponse à la dépêche Projet NACA [2]: transcodage automatique vers Java de 4 millions de lignes Cobol. Évalué à -2.

    > Cela ne veut pas dire que l'édition de liens fait partie de la compilation.

    J'ai dit "blabla ... pour avoir du code objet ?".
    Je n'ai pas dit "blabla .. pour avoir un exécutable ?".

    L'exécutable est la forme que l'OS peut charger et lancer l'exécution.

    > De même pour le préprocessing.

    Le préprocessing peut faire parti de la compilation (et en général il fait parti de la compilation).

    > D'ailleurs toutes ces tâches sont effectuées par des exécutables séparés

    Ce qui est un "détail" d'implémentation.

    > http://fr.wikipedia.org/wiki/Compilateur

    L'article ne me parait par clair.

    http://fr.wikipedia.org/wiki/Compilation (c'est un résumé)
    en informatique, la compilation est le travail réalisé par un compilateur qui consiste à transformer un code source lisible par un humain en un fichier binaire exécutable par une machine


    http://fr.wikipedia.org/wiki/Compilateur
    Le programme en langage machine produit par un compilateur est appelé code objet.
    [...]

    Structure d'un compilateur

    La tâche principale d'un compilateur est de produire du code objet correct.
    [...]

    Compilateur croisé

    Un compilateur croisé (en anglais cross compiler) est un programme capable de traduire un code source en code objet
    [...]

    Byte code ou code octet

    [...]
    C'est le cas du compilateur Java, qui traduit du code Java en bytecode Java (code objet).


    Pour moi, la compilation c'est partir d'un fichier source (généralement comprehensible par un humain) qui ne peut être "exécuté" vers un code objet qui peut être exécuté (compréhensible par un cpu typiquement). Code objet natif (par exemple il peut être exécuter directement par un i386) ou code objet qui sera exécuté par une "machine virtuelle" (typiquement java, etc).
    Notons que le compilateur java gcj peut produire du natif ou pour machine virtuel (quoique je n'en suis pas sûr ; quelqu'un pour confirmer ou infirmer ?).

    L'édition de lien ne fait pas parti de la compilation car l'édition de lien ne produit pas de code machine. L'édition de lien donne des informations (comment lancer le code objet, à quelle adresse est la fonction bidule, etc).

    Le language assembleur est compréhensible par un humain (OK, ils ne sont pas nombreux :-)). L'assembleur n'est pas compréhensible par le cpu (ou une machine virtuelle) et donc n'est pas du code object. On trouve de l'assembleur dans Linux. Cette assembleur doit être compilé (le terme assemblé me convient aussi). L'assembleur, pour un compilateur C par exemple, est généralement une étape intermédiaire lié à l'implémentation du compilateur. Un compilateur pourrait produire du code object directement et ça resterait un compilateur. Un "compilateur" (notez les guillements) qui ne fait que traduire du C (par exemple) à l'assembleur n'est pas un compilateur. Ce qui est produit ne peut être exécuté (lu par un cpu typiquement).

    > « La transformation du code assembleur en langage machine est accomplie par un programme nommé assembleur, dans l'autre sens par un programme désassembleur. Les opérations s'appellent respectivement assemblage et désassemblage. »

    Ça OK. Mais ce qui fait le passage de assembleur à code objet peut aussi est appelé un compilateur.
    Mais la dénomination assembleur est bonne car, comme tu le pointes, on peut désassembler (avec quelques perte d'info comme les noms de variable). Il est rare qu'on puisse remonter au C depuis le code objet.

    Notons qu'il y a (avait) des compilateurs C++ qui générait du C puis compilait le C.
    Mais ce qui permet de passer de C++ à code objet, qu'il passer ou non par les languages intermédiaires C et assembleur, est un compilateur. Les formes intermédiaires sont des "détails" d'implémentations.
    Un programme qui ne produit que de l'assembleur (et jamais de code objet) n'est pas un compilateur (selon moi).