[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Documentation complète sur la compilation de programmes



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!





Reply to: