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!
--
Basile STARYNKEVITCH http://starynkevitch.net/Basile/
email: basile<at>starynkevitch<dot>net mobile: +33 6 8501 2359
8, rue de la Faiencerie, 92340 Bourg La Reine, France
*** opinions {are only mine, sont seulement les miennes} ***