• [^] # Re: IR

    Posté par . En réponse à la dépêche LLVM 2.9 !. Évalué à 10.

    L'immense avantage de LLVM sur GCC est sa modularité. Tous les compilateurs modernes ont bien trois « étages »: le front-end, qui fait l'analyse syntaxique et sémantique du code écrit par le programmeur; le middle-end, comme par exemple GIMPLE pour GCC, l'IR de LLVM, SIMPLE pour Open64, etc.; et le back-end, qui transforme la représentation intermédiaire en code exécutable pour une machine-cible donnée.

    Cela étant dit, GCC est notoirement connu pour volontairement/politiquement mélanger informations du front-end et informations du back-end, pour éviter que des « méchants » « volent » les différents front-ends de GCC et y branchent leurs propres middle- et back-ends. Bouh, vilains. À cause de cela, beaucoup de programmeurs se sont détournés de GCC. Comprenons-nous bien: un compilateur est, par définition, quelque chose de difficile à modifier sans tout casser. Mais avec la politique suivie pour GCC, il est encore plus difficile de rentrer dans le code. Heureusement, le comité derrière GCC a enfin accepté (relativement récemment) de permettre l'utilisation de plugins (les raisons des refus précédents étant eux aussi politiques, liés à la peur des grands méchants qui pourraient créer des plugins propriétaires, au code fermé et utiliser le résultat du travail de GCC sans participer, tout ça).

    Le fait est que LLVM est plus simple à utiliser et étendre que GCC. C'est le compilateur que mon équipe a choisi pour notre projet de développement (et oui, nous sommes des gentils, donc quand nous voyons des bugs qui ne sont pas liés à nos extensions à proprement parler, nous remontons l'info).

    Un peu comme une manière de dire que le backend de gcc ne serait pas réutilisable (!) ou que gcc ne serait pas bien documenté.

    Ah ben c'est vrai. La doc de LLVM (tant commentaires dans le code que sur le site web) reste limitée, et il faut faire pas mal d'efforts pour rentrer dans le code. GCC est dix fois pire de ce point de vue. La doc de GCC est juste atroce.