URL: https://linuxfr.org/news/llvm-29 Title: LLVM 2.9 ! Authors: rewind Date: 2011年04月07日T16:56:34+02:00 License: CC By-SA Tags: llvm, compilateur, gcc, logiciel, c, objective-c et fortran Score: 45 La [version 2.9 de LLVM](http://llvm.org/releases/2.9/docs/ReleaseNotes.html) vient de sortir et a été [annoncée par Chris Lattner le 6 avril](http://lists.cs.uiuc.edu/pipermail/llvm-announce/2011-April/000037.html) ! Pour ceux qui se posent encore la question, [LLVM](http://llvm.org/) est une suite de compilation concurrente de GCC, sous licence UIUC (semblable à BSD), qui a pour but de produire des briques de bases modulaires pour construire toute sorte de programmes : compilateurs, debugger, assembleur, etc. L'aspect hautement modulaire permet également de pouvoir travailler sur une petite partie et d'en faire bénéficier toutes les autres. C'est notamment le cas des optimisations : en effet, LLVM utilise une [représentation intermédiaire (IR) parfaitement spécifiée](http://llvm.org/docs/LangRef.html) et les [optimisations](http://llvm.org/docs/Passes.html) se font sur cette représentation. Et ce n'est qu'un des nombreux avantages de LLVM. Cette version 2.9 permet de consolider plein d'aspects de LLVM. Parmi les nouveautés principales, on notera : - la génération de code a été améliorée, en particulier pour l'architecture ARM ; - l'optimisation au moment de la liaison (LTO) a été améliorée également ; - un nouvel allocateur de registre a été écrit, mais n'est pas activé par défaut pour cette sortie ; - l'infrastructure Machine Code est désormais utilisée par défaut pour produire du code objet directement (plutôt que de passer par un assembleur externe) ; - [Clang](http://clang.llvm.org/), le compilateur C/C++/Objective-C/Objective-C++ gère le C++0x de mieux en mieux, avec l'ajout des *rvalue references* et des *variadic templates* ; - [LLDB](http://lldb.llvm.org/), le débugger du projet LLVM, atteint un certain stade de maturité alors que ce n'était qu'un projet larvaire à la dernière sortie. ---- [The LLVM Compiler Infrastructure](http://llvm.org/) [Clang](http://clang.llvm.org/) [LLVM 2.9 Release Notes](http://llvm.org/releases/2.9/docs/ReleaseNotes.html) [LLVM 2.8 sur linuxfr.org](http://linuxfr.org/news/llvm-28-%C3%A7a-avance) [LLVM 2.7 sur linuxfr.org](http://linuxfr.org/news/llvm-27-est-sorti) ---- ## LLVM 2.9 Parmi les autres nouveautés concernant les projets LLVM pour cette sortie : ### Clang [Clang](http://clang.llvm.org/) a fait de gros progrès depuis la dernière fois et est considéré comme un outil de production. Il prend en charge [une partie de plus en plus importante de la future norme C++](http://clang.llvm.org/cxx_status.html). Il est aussi capable de compiler [un noyau Linux](http://lists.cs.uiuc.edu/pipermail/cfe-dev/2010-October/011711.html) (avec cependant quelques limites, notamment au niveau de l'API crypto qui utilise des extensions GNU) et [la machine virtuelle Java HotSpot](http://weblogs.java.net/blog/simonis/archive/2011/02/10/compiling-hotspot-vm-clang). ### DragonEgg [DragonEgg](http://dragonegg.llvm.org/) est un greffon pour GCC qui remplace le backend de GCC par celui de LLVM. Ce projet se stabilise mais n'est pas encore considéré comme suffisamment mûr. Pour cette sortie, des améliorations ont été apportées qui permettent de compiler de plus en plus de code Fortran, Objective-C, Objective-C++ et Java, sans qu'on sache si le code produit fonctionne bien comme prévu. ### Changement de licences Les deux projet [compiler-rt](http://compiler-rt.llvm.org/) (qui fournit des fonctions pour certaines instructions qui n'existeraient pas sur certaines architectures, comme par exemple la conversion d'un double en entier signé 64 bits) et [libc++](http://libcxx.llvm.org/) (une bibliothèque standard C++ complète écrite pour C++0x) sont maintenant sous double licence UIUC (comparable à BSD) et MIT. ## Le futur : LLVM 3.0 La prochaine version de LLVM sera la 3.0. Le principal changement sera l'abandon définitif de la branche llvm-gcc (le front-end de GCC avec le backend de LLVM) au profit d'une part de Clang et d'autre part de DragonEgg qui a la même utilité. On peut aussi penser que le système de type de LLVM va être revu. Des discussions ont eu lieu et Chris Lattner a produit une [note pour décrire les limites du système actuel](http://nondot.org/sabre/LLVMNotes/TypeSystemRewrite.txt) et ce qu'il faudrait faire pour le modifier. Les types dans LLVM sont traités de manière un peu particulière. En effet, c'est la structure du type qui est importante et pas son nom. Ceci a l'avantage de simplifier certaines comparaisons (une simple égalité de pointeur suffit) mais génère beaucoup de travail car il faut s'assurer en permanence de cette propriété (et donc comparer les structures des types). L'idée ici est de permettre de faire des distinctions entre type qui ont la même structure mais pas le même nom, de manière à simplifier certaines parties critiques du code d'une part, et la vie des utilisateurs qui veulent construire des types qui font référence à eux-même (comme des types de listes chaînées par exemple). L'autre point qui pourrait évoluer est la manière dont sont gérées les architectures-cibles. Dans GCC et certains outils GNU, les cibles sont représentées à l'aide d'un triplet de la forme `i686-pc-linux-gnu`. Cependant, cette notation n'est pas normalisée et ne résout pas de nombreux problèmes. Chris Lattner a proposé une [nouvelle manière de spécifier les cibles](http://nondot.org/sabre/LLVMNotes/TargetSpec.txt) qui pourrait donner par exemple `x86-64.le.linux.elf.unknown` ou `arm.le.linux-eabi.elf.cortex-a8`. ## LLVM Developers' Meeting Même s'il est passé inaperçu sur LinuxFR, c'est le bon moment pour parler du [LLVM Developers' Meeting](http://www.llvm.org/devmtg/2010-11/) qui s'est déroulé le 4 novembre 2010. Plusieurs projets internes et externes ont été présentés, que ce soit par des développeurs de LLVM ou par des grands noms comme Google, AMD, Apple, CERN, Sony, Ericsson, etc. C'est l'occasion pour les utilisateurs de LLVM de remonter leurs contraintes et leur demandes à l'équipe de LLVM. On notera en particulier : - *AMD OpenCL Compiler - Using LLVM to produce a cross-platform heterogeneous compiler tool chain* par Micah Villmow, AMD Inc. : [présentation](http://www.llvm.org/devmtg/2010-11/Villmow-OpenCL.pdf) et [vidéo](http://www.llvm.org/devmtg/2010-11/videos/Villmow_OpenCL-desktop.mp4) - *Implementing Include-What-You-Use using clang* par Craig Silverstein, Google ou comment utiliser Clang pour n'inclure que les en-têtes nécessaires dans un fichier C et donc accélérer le temps de compilation : [présentation](http://www.llvm.org/devmtg/2010-11/Silverstein-IncludeWhatYouUse.pdf) et [vidéo](http://www.llvm.org/devmtg/2010-11/videos/Silverstein_IncludeWhatYouUse-desktop.mp4) - *The Crack Scripting Language* par Michael Muller, Google, un [nouveau langage de script](http://code.google.com/p/crack-language/) créé par un employé Google sur ses 20% de temps libre : [présentation](http://www.llvm.org/devmtg/2010-11/Muller-Crack.pdf) et [vidéo](http://www.llvm.org/devmtg/2010-11/videos/Muller_Crack-desktop.mp4) - et [plein d'autres](http://www.llvm.org/devmtg/2010-11/)...

AltStyle によって変換されたページ (->オリジナル) /