Bonjour,
je remercie les personnes ayant pris le temps de me répondre.
Pour répondre à la question de Jacques, ce n'est pas un projet bac +2,
c'est simplement de l'intéressement personnel et la volonté d'en savoir
un peu plus sur cette boite obscure qu'est un compilateur de programmes,
ainsi que la volonté d'essayer de comprendre en profondeur tout ceci, la
difficulté étant principalement qu'il y a peu de ressources traitant du
sujet, ce pourquoi je fais appel à la liste.
Je remercie particulièrement Basile pour son explication ci-dessous.
Visiblement, la question ne semble pas être simple et mérite donc un
approfondissement de celle-ci.
J'aurai une petite question complémentaire:
vu que les compilateurs génèrent du "code machine", j'aurai tendance à
dire que les langages compilés sont syntaxiquement de "haut niveau" par
opposition à un langage type "assembleur". Suis-je dans le vrai?
Merci d'avance pour votre réponse et votre éclairage.
Le 26/12/2015 20:18, Basile Starynkevitch a écrit :
On 12/23/2015 05:43 PM, enae wrote:
[...]
Après examen de tutoriels, livres de programmations et autres
ressources, je continue de me poser des questions sur le processus de
compilation de programmes.
Certes, le fichier sources est traduit en langage machine, certes,
pour ce faire il faut utiliser des options -o etc...
Mais existe-t-il réellement un manuel complet (ou ressource
informatique) abordant de façon concrète, claire et en profondeur les
points suivants:
- les différentes étapes du processus de compilation, leur utilité,
le fonctionnement en détail de celles-ci
- toutes les options possibles, chacune étant expliquée en profondeur
- des explications sur l'impact hardware lié à la compilation
- la compilation croisée
En principe, il ne peut pas exister de resources universelles
décrivant comment compiler un programme, pour la bonne raison que d'un
compilateur à l'autre, et d'un language à l'autre, le processus de
compilation est très différent.
Concrètement, compiler un programme dont le code source est codé en C
et un programme dont le code source est codé en Ocaml ou en Common
Lisp est vraiment très différent, notamment parce que dans le détail
"compiler" veut dire des choses différentes, et qu'il y a peut-être
différentes façons de compiler (le développeur ou le contributeur
occasionnel de patch va compiler avec des options de déboguage;
l'utilisateur et le packageur -celui qui fait un paquet Debian-
préfère compiler avec des options d'optimisations).
D'autre part, un logiciel libre suffisamment complexe utilisera
souvent ce qu'on peut appeler pompeusement des techniques de
méta-programmation: une partie du code source en C (par exemple)
serait alors générée. Par exemple le compilateur GCC a actuellement
plus d'une douzaine de générateurs spécialisés de code C++ qui
genèrent une petite partie du compilateur, la grande majorité étant du
C++; et certains de ses generateurs (pour GCC, gengtype par exemple)
sont très spécifiques à l'application.
La plupart des logiciels libres ont des instructions de compilation,
souvent en anglais techniques (donc assez lisible), par exemple dans
un fichier README ou INSTALL.
J'aurais tendance à suggérer de commencer à compiler un petit logiciel
libre; ainsi il est plus simple de compiler GNU bash ou GNU coreutils
que de compiler le compilateur GCC ou le noyau Linux.
Il y a aussi la question de la configuration du logiciel (une
première étape de l'installation est souvent de lancer un script, par
exemple ./configure, qui vérifie quels outils sont disponibles sur le
système et génère des fichiers de configuration ad-hoc). Et la
question, très liée à la configuration, de la dépendance de paquets
existants.
Si on veut viser la généralité la plus forte, ces thématiques sont
encore des sujets de recherche académiques (et on peut faire une thèse
de doctorat, y compris en France, sur ces questions).
Bonne année à tous!