Demat'INal,
La semaine dernière sortait, après un processus de release candidate bien plus long que d'habitude (la rc1 date quand même du 30 janvier 2020), la version 10.0.0 de la toolchain LLVM, dont un des représentants les plus connus est le compilateur Clang.
Ce petit journal pour faire une sélection partiale des nouveautés.
Niveau Clang
On notera principalement le support des concepts de C++20 à travers le drapeau -std=c++2a
.
Si vous avez l'habitude de lancer gdb
sur clang, vous serez ravis d'apprendre que le driver clang appelle désormais clang
sans passer par un sous-processus, ce qui évite un set follow-fork-mode child
.
Parmi la pléthore (rien à voir avec les pétaures) de nouveaux warning, on notera -Wmisleading-indentation
qui reprend une idée introduite dans GCC et qui pointe du ^
des cas d'indentations suspects qui pourraient signifier une erreur de code, comme dans ce cas là :
int square(int num) {
if (num)
num = 0;
return num;
}
Si vous êtes contraints par certaines versions de la glibc, le drapeau -fgnuc-version=
permet désormais de définir les macros ad-hoc pour forcer une version particulière au niveau des fichiers d'en-tête (non, ça ne change rien à votre libc effective, ça permet juste de régler certains problèmes de compatibilité).
Assez amusant, le drapeau -fpatchable-function-entry=N[,M]
permet d'ajouter N (resp. N-M) nop
avant (resp. après) le point d'entrée des fonctions. Amis patcheurs de binaire, faites vous plaisir !
Plusieurs fonctionnalités d'OpenMP 5 font aussi leur entrée, notamment le bien pratique support des for range loop.
clang-format
gagne le drapeau --dry-run
, bien pratique pour vérifier qu'un fichier est bien conforme aux règles de formatage demandées.
Votre serviteur a corrigé un bug non négligeable dans la gestion de -D_FORTIFY_SOURCE
, pour en savoir plus, c'est par là
Outils basés sur clang
Une des forces de clang, c'est la possibilité d'écrire des outils cools qui comprennent vraiment le langage analysé (pour ne pas le nommer, C++) sans avoir à réécrire un parseur complet. On notera pas mal d'avancées dans :
clangd, un language server sur lequel votre éditeur favori peut se brancher pour obtenir des fonctionnalités d'aide à l'édition de code.
clang-doc une alternative à doxygen
clang-tidy un linter sous stéroïdes
LLVM, le cœur
Le cœur de LLVM, c'est le LangRef, le document qui décrit la représentation interne utilisée et la sémantique de chacun des éléments. On notera l'introduction d'intrinsèques pour la gestion des opérations matricielles sur des types vectoriels, mais aussi l'instruction freeze qui permet de figer une valeur qui aurait été de type poison
ou undef
auparavant.
On notera avec amusement que pour les architectures skylake-avx512, LLVM essaie d'utiliser principalement des vecteurs de 256 bits pour éviter des ralentissements
Autres
Je fatigue, alors on va faire un best of pour les autres outils de la toolchain :
le linker lld propose de changer le mangling s'il voit qu'un symbole avec un mangling C++ aurait été bon avec
le mangling Cle projet se voit doter d'une libc,
llvm-libc
qui est encore jeune, mais dont les documents de conceptions sont intéressants.
Communauté
Pour ceux que le côté social du développement Open Source intéresse, je vous invite à lire ce fil de discussion sur lequel j'émets humblement (mais fermement) quelques doutes.
Is it true that the apes wear furs of gold when they marry?
# Petite erreur
Posté par Yuul B. Alwright . Évalué à 8.
Merci beaucoup pour ce journal fort intéressant.
J'ai remarqué une petite erreur dans la section
Outils basés sur clang
.Le lien attaché à
éditeur favoris
est incorrect.Voici le bon lien: https://github.com/emacs-lsp/lsp-mode
# Typo
Posté par Joël Thieffry (site web personnel) . Évalué à 1.
Bonjour, je crois avoir relevé une petite coquille :
d'ajouter N (resp. N-M) ⇒ d'ajouter N (resp. M)
Du coup, est-ce que ça veut dire qu'on demander à ajouter des NOP avant, avant et après, mais pas uniquement après ? Où alors il manque un morceau de syntaxe du genre
-fpatchable-function-entry=,M
.[^] # Re: Typo
Posté par serge_sans_paille (site web personnel) . Évalué à 3.
C'est bien une erreur, il fallait lire
Si un modo peut faire le changement ?
# Côté social
Posté par pamputt . Évalué à 2.
Bonjour, je n'ai pas réussi à trouver ta réponse dans tous les courriels qui ont suivi l'annonce de l'ouverture d'un serveur « Discord ».
[^] # Re: Côté social
Posté par serge_sans_paille (site web personnel) . Évalué à 2.
Ahah, magie du français. J'émets des doutes sur le sujet, mais je les garde pour moi :-)
Sans trop prendre partie, on remarquera que la communauté s'est scindée entre ceux qui sont sur IRC, ceux qui sont sur Discord, et ceux qui sont sur les deux.
# Comme sur les 360 ?
Posté par Tonton Th (Mastodon) . Évalué à 3.
OMG ! C'est enfin le retour de Superzap ?
# Patch
Posté par lym . Évalué à 0.
Pour le -fpatchable-function, on verrait une version plus générique du -finstrument-functions de gcc mais à y réfléchir un peu ça semble difficilement utilisable en comparaison, surtout dans un contexte visant plusieurs architectures avec des tailles d'instruction "nop" potentiellement différentes…
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.