33 votes

Comment fonctionnent les compilateurs C/C++ ?

Après plus d'une décennie de codage C/C++, j'ai remarqué le schéma suivant : les très bons programmeurs ont tendance à avoir une connaissance détaillée des rouages du compilateur.

Je suis un assez bon programmeur et j'ai une collection ad-hoc de "superstitions" sur les compilateurs. J'aimerais donc relancer mes connaissances et commencer par les bases.

Quelqu'un peut-il recommander des liens vers des ressources en ligne ou des livres préférés ? Je suis particulièrement intéressé par la compilation C/C++, l'optimisation, GCC et LLVM.

28voto

sourabh jaiswal Points 495

Commencez par le livre du dragon.... (insistez davantage sur l'optimisation et la génération de code).

Vous pouvez utiliser des générateurs d'analyseurs (lex et yacc) pour votre interface (pour vous faciliter la vie et vous concentrer sur des choses plus importantes). ....

Ensuite, lisez le livre gcc internals tout en parcourant le code source de gcc.

11voto

NoMoreZealots Points 2539

Les Compiler Text sont bons, mais ils sont un peu lourds pour apprendre soi-même. Jack Crenshaw a un "livre" qui était une série d'articles que vous pouvez télécharger et lire, intitulé "Lets Build a Compiler". Il suit une méthodologie d'apprentissage par la pratique qui est idéale si vous n'avez rien obtenu en suivant des cours formels sur le sujet, ou si cela fait beaucoup trop d'années que vous ne l'avez pas fait (c'est mon cas). Elle vous tient la main et vous guide dans l'écriture d'un compilateur au lieu de vous assommer de Lambda Calculus et de questions théoriques profondes dont seul le monde universitaire se soucie. C'était un bon moyen de remuer les cellules cérébrales qui n'avaient qu'un souvenir flou de l'écriture de quelque chose sur le Vax (OUI, c'est bien un Vax !) il y a de nombreuses années à l'école. Il est écrit de manière très conversationnelle et il est facile de s'asseoir et de le lire, contrairement à la plupart des manuels scolaires qui nécessitent plusieurs cafés pour passer le premier chapitre. Une fois que vous avez une base de compréhension, des textes plus traditionnels tels que le livre du Dragon sont d'excellentes références pour approfondir votre compréhension. (Et personnellement, j'aime les versions Dead Tree, j'ai imprimé celle de Jack, c'est beaucoup plus facile à lire dans une position confortable que sur un ordinateur portable. Et les lecteurs Ebook sont trop chers pour quelque chose qui ne donne pas encore l'impression de lire un vrai livre).

Ce que certains pourraient appeler un "inconvénient", c'est qu'il est écrit en Pascal, mais j'ai pensé que cela me faisait réfléchir davantage que si quelqu'un m'avait donné un programme C fonctionnel pour commencer. De plus, il a été écrit en pensant au 68000, qui n'est utilisé que dans les systèmes embarqués pour le moment. Encore une fois, ce n'était pas un problème pour moi, je connaissais l'asm 68000 et l'asm 68000 est plus facile à lire que d'autres asm.

10voto

Brandon E Taylor Points 10927

9voto

J-16 SDiZ Points 14191

Si vous voulez de l'édition d'arbres morts, essayez L'art de la conception de compilateurs : Théorie et pratique .

4voto

Norman Ramsey Points 115730

Comme indiqué par Pete Eddy, Jack Crenshaw du tutoriel est excellent pour les débutants. Mais si vous voulez voir comment un vrai, la production compilateur C de travaux, qui a été conçu par de brillants ingénieurs au lieu de créé en jetant le code sur le mur jusqu'à ce que quelque chose de coincé—procurez-vous une copie de Fraser et Hanson est Un Reciblage Compilateur C: la Conception et la mise en Œuvre, qui contient le code source pour le très propre lcc compilateur. Les explications de la conception et de la mise en œuvre sont mélangés avec le code. Ce n'est pas un premier livre pour un débutant, mais il permettra de rembourser une étude attentive, et vous pouvez obtenir une copie utilisée pour 35$.

Pour un plus long texte de présentation sur l' lcc, voir Compiler C plus Rapide sur Linux.

La lcc page web contient également des liens vers un certain nombre de bons manuels. Je ne connais pas de texte d'introduction que j'aime beaucoup, cependant.

P. S. Désolé de vous de me faire arnaquer à l'Uni.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X