URL: https://linuxfr.org/news/sortie-de-llvm-clang-lld-lldb-8-0-0 Title: Sortie de LLVM, Clang, lld, lldb 8.0.0 Authors: serge_sans_paille Ontologia, bubar🦥, Benoît Sibaud, Sylvestre Ledru, Davy Defaud, palm123 et Bruno Michel Date: 2019年03月20日T16:44:41+01:00 License: CC By-SA Tags: llvm, clang et spectre Score: 35 Après cinq versions candidates, l’étiquette finale a été apposée sur la branche 8.0.0 de la famille LLVM. Cette dépêche reprend les points importants des notes de sortie associées. C’est une sélection totalement biaisée, libre à vous de lire les journaux des modifications respectifs pour avoir tous les détails ! ---- [Page de téléchargement](http://releases.llvm.org/download.html#8.0.0) [L’infrastructure de compilation](http://llvm.org/) [Le compilateur C, C++ et ObjC](https://clang.llvm.org/) [L’éditeur de liens](http://lld.llvm.org/) [Le débogueur](http://lldb.llvm.org/) [Les bibliothèques libc++ et libc++abi](https://libcxx.llvm.org/) ---- LLVM ==== [[_Notes de version_](http://releases.llvm.org/8.0.0/docs/ReleaseNotes.html)] - possibilité (sous x86) de fournir un profil d’accès mémoire afin de limiter le nombre de défauts de cache [[RFC]](https://lists.llvm.org/pipermail/llvm-dev/2018-November/127461.html) ; - le *back‐end* [Webassembly](https://webassembly.org/) gagne le statut stable ! - les personnes développant des extensions LLVM doivent maintenant utiliser `add_llvm_library` au lieu de `add_llvm_loadable_module` pour enregistrer leurs extensions. Clang ===== [[_Notes de version_](http://releases.llvm.org/8.0.0/tools/clang/docs/ReleaseNotes.html)] - possibilité de fournir un fichier de renommage pour utiliser les informations de profilage d’une version A d’un binaire pour recompiler une version B [[doc]](http://releases.llvm.org/8.0.0/tools/clang/docs/UsersManual.html#profile-remapping) ; - possibilité de forcer la valeur des variables déclarées sur la pile ou en mises en registre, au lieu de les laisser non initialisées, en utilisant `-ftrivial-auto-var-init=pattern` ; - quelques *warnings* de plus : - `-Wextra-semi-stmt` pour détecter les points virgules inutiles, mais en ignorant certains cas liés à l’expansion de macros, - `-Wempty-init-stmt` détecte les initialisations vides dans le contexte de conditions/boucles (c’est du C++17, [[spec]](https://en.cppreference.com/w/cpp/language/if)) ; - ajout du builtin `__builtin_rotateleft32` ; - introduction de `-mspeculative-load-hardening` pour se prémunir de la famille de failles dite *Spectre* [[rtd]](https://llvm.org/docs/SpeculativeLoadHardening.html) ; - OpenMP 5 mieux géré, et pas mal d’améliorations du côté d’OpenCL ; - l’*undefined behavior sanitizer*, déclenché par `-fsanitize=undefined`, a gagné plusieurs extensions, dont une qui vérifie les contraintes d’alignement ; - clang-format voit sa [gestion des reformatages de macros améliorée](https://reviews.llvm.org/D33440). Extra Clang Tools ================= [[_Notes de version_](http://releases.llvm.org/8.0.0/tools/clang/tools/extra/docs/ReleaseNotes.html)] clangd ------ `clangd` est un démon qui fournit un service de type complétion, etc., à ces clients. - meilleure intégration avec le [_Language Server Protocol_](https://microsoft.github.io/language-server-protocol/) ; - plusieurs optimisations (taille et vitesse) pour la gestion des grosses bases de code. clang-tidy ----------- `clang-tidy` est un outil de vérification de code. - un bon paquet de tests pour l’utilisation de la bibliothèque [abseil](https://abseil.io/) ; - un autre paquet de tests pour la modernisation de code (p. ex. : remplacement de tableaux à taille fixe par des `std::array`) ; - quelques tests autour des [CppCoreGuidelines](https://github.com/isocpp/CppCoreGuidelines). lld === [[_Notes de version_](http://releases.llvm.org/8.0.0/tools/lld/docs/ReleaseNotes.html)] - choix de l’adresse de chargement des binaires comme un multiple d’une *superpage*, pour améliorer la vitesse de chargement dans les cas où le système cible prend en charge les *superpage*s — si comme moi tu ne sais pas ce qu’est une super‐page, [clic clic](https://www.usenix.org/legacy/events/osdi2002/tech/full_papers/navarro/navarro.pdf) ; - autre choix assez amusant : la section `.note` qui contient de précieuses informations (comme le [_build-id_](https://fedoraproject.org/wiki/Releases/FeatureBuildId)) est maintenant placée en début de fichier pour être présente dans les *core files*, même s’ils sont tronqués ; - des améliorations pour le format [COFF](https://en.wikipedia.org/wiki/COFF) et pour l’environnement [MinGW](http://www.mingw.org/), où l’on voit que Windows n’est pas une plate‐forme laissée de côté par LLD. lldb ==== - coloration syntaxique (pour C) et complétion de code. Notes de fin ============ Cette version de LLVM est la dernière compilable avec GCC 4.8, les versions minimales requises augmentent, pour les raisons évoquées dans [ce fil de discussion](http://lists.llvm.org/pipermail/llvm-dev/2017-October/118673.html). Et c’est aussi probablement la dernière version sous Subversion, le choix a été fait de passer à un dépôt unique (_a.k.a._ *monorepo*) sous Git. Pas mal de doc à ce sujet [_ici_](http://lists.llvm.org/pipermail/llvm-dev/2018-October/thread.html#127068), [_là_](http://lists.llvm.org/pipermail/llvm-dev/2018-October/thread.html#127055) ou encore dans [_ce coin_](http://lists.llvm.org/pipermail/llvm-dev/2018-October/thread.html#126894).

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