Clang est maintenant utilisé pour compiler Chrome pour Windows, Google abandonne donc Visual C++
Et en voici les raisons

Le , par Michael Guilloux, Chroniqueur Actualités
Quel est votre compilateur C/C++ préféré en 2018 ?
Google Chrome sous Windows est maintenant construit en utilisant le compilateur open source Clang. Ainsi, après avoir utilisé le compilateur C++ de Microsoft pour la version Windows de son navigateur, Google utilise maintenant le même compilateur pour Windows, macOS, Linux et Android ; un changement qui fait de Chrome le premier projet majeur à utiliser Clang sous Windows.

Sur macOS et Linux, Chrome était déjà construit en utilisant le compilateur Clang et la chaîne d'outils LLVM. Mais Chrome pour Windows utilisait plutôt le compilateur Visual C++ de Microsoft. Il s'agit en effet du compilateur le mieux pris en charge et le plus largement utilisé sur Windows et, de manière logique, Visual C++ est le compilateur avec le meilleur support pour la large gamme d'outils de débogage et de diagnostic de Windows.

En 2013, Google a toutefois décidé d'utiliser Clang sur toutes les plateformes, pour diverses raisons, y compris le fait qu'utiliser le même compilateur partout pourrait rendre le développement beaucoup plus facile. Mais la firme de Mountain View a été confrontée à un problème bloquant : le support de Clang et LLVM n'était pas assez mature pour qu'elle puisse faire ce changement rapidement. Google a donc commencé par mettre en place une équipe pour travailler sur Clang et LLVM afin qu'ils puissent avoir un meilleur support sous Windows. Depuis 2015, Google a ainsi pu commencer à tester l'utilisation de Clang pour compiler Chrome pour Windows dans la version Canary. L'objectif était de s'assurer d'être prêt à implémenter ce changement dans la version stable du navigateur ; ce qui est maintenant le cas avec Chrome 64 disponible depuis fin janvier.


« Depuis Chrome 64, Chrome pour Windows est compilé avec Clang. Nous utilisons maintenant Clang pour construire Chrome pour toutes les plateformes sur lesquelles il s'exécute : macOS, iOS, Linux, Chrome OS, Android et Windows. Windows est la deuxième plateforme avec le plus grand nombre d'utilisateurs de Chrome après Android selon StatCounter, ce qui rend ce changement particulièrement excitant », a annoncé Nico Weber de Google.

Il explique que Clang est le tout premier compilateur C++ open source ABI-compatible avec Microsoft Visual C++ (MSVC), ce qui signifie que vous pouvez construire certaines parties de votre programme (par exemple, les bibliothèques système) avec le compilateur MSVC ("cl.exe", d'autres parties avec Clang, les lier entre elles (soit par l'éditeur de liens de MSVC, "link.exe", ou LLD, l'éditeur de liens du projet LLVM) et obtenir un programme qui fonctionne.

La compilation de Chrome localement avec Clang est environ 15 % plus lente qu'avec MSVC. Cependant, la façon dont Clang émet des informations de débogage est plus parallélisable et les builds avec un service de build distribué (par exemple Goma) sont donc plus rapides. La taille du programme d'installation de Chrome est plus petite pour les versions 64 bits et légèrement plus grande pour les versions 32 bits utilisant Clang. Côté performance, les chiffres de télémétrie de Google indiquent que la compilation donne à peu près les mêmes résultats que ça soit avec MSVC ou Clang. Idem en ce qui concerne la stabilité.

En plus des bénéfices d'utiliser le même compilateur pour les plateformes de Chrome (cross-compilation, disponibilité d'optimisations spécifiques sur toutes les plateformes, etc.), Google met en avant d'autres motivations comme l'ouverture de Clang. Chromium étant open source, Google pense en effet que c'est bien qu'il soit construit avec une chaîne d'outils open source. Google explique aussi qu'avec moins de compilateurs, cela devient beaucoup plus facile d'activer de nouvelles fonctionnalités C++.

Google cite un certain nombre d'avantages à passer à Clang. Mais, il y a également des inconvénients. L'entreprise explique notamment que :
  • Clang ne prend pas en charge C++ / CX ou #import "foo.dll" ;
  • MSVC offre un support payant, alors que Clang ne vous donne que le code et la possibilité d'écrire des correctifs vous-même (bien que la communauté soit très active et utile) ;
  • MSVC a une meilleure documentation ;
  • les fonctionnalités de débogage avancées telles que Modifier et Continuer ne fonctionnent pas avec Clang.

Il est également important de préciser que Google n'a pas encore complètement migré vers la chaîne d'outils LLVM. « Clang n'est pas un remplaçant de Visual Studio, mais un complément », a dit Nico Weber. « Nous utilisons encore les en-têtes et les bibliothèques de Microsoft pour compiler Chrome, nous utilisons encore des binaires SDK comme midl.exe et mc.exe, et de nombreux développeurs Chrome/Windows utilisent encore l'EDI Visual Studio (pour le développement et le débogage) ». Mais à terme, Google prévoit de passer à l'éditeur de liens LLVM et peut également utiliser la bibliothèque libc++ à la place de la STL MSVC.

Source : Blog LLVM

Et vous ?

Qu'en pensez-vous ?
Quel est votre compilateur C/C++ préféré en 2018 ? Pourquoi ?

Voir aussi :

Chrome 65 est disponible avec de nouvelles fonctionnalités développeur, la page d'extensions se met également au Material Design
Sortie de LLVM et Clang 5.0, avec des améliorations de performance pour beaucoup de processeurs et une implémentation des coroutines
Microsoft propose une compilation des fonctionnalités de C++ 17 dans la préversion Visual C++ 2017 version 15.3, et indique celles qui sont à venir


Vous avez aimé cette actualité ? Alors partagez-la avec vos amis en cliquant sur les boutons ci-dessous :


 Poster une réponse Signaler un problème

Avatar de Matthieu76 Matthieu76 - Membre confirmé https://www.developpez.com
le 06/03/2018 à 14:21
C'est quoi ce sondage ? Il manque des principaux compilateurs tel que MinGW, MSVC compiler, et j'en oublie sûrement d'autres...

Ah, autant pour moi, MSVC compiler n'était pas affiché car personne n'avez voté pour et MinGW c'est G++ pour windows.
Avatar de RyzenOC RyzenOC - Inactif https://www.developpez.com
le 06/03/2018 à 15:06
autre: Intel C++ Compilers, c'est celui qui offre les meilleurs perf
Avatar de Aiekick Aiekick - Membre chevronné https://www.developpez.com
le 06/03/2018 à 15:21
je ne le connaissais pas. on peut l'utiliser dans visual studio ? est ce que tu aurais un comparatif perf de ce compilateur fasse aux autres ?
Avatar de Uther Uther - Expert éminent https://www.developpez.com
le 06/03/2018 à 15:27
Citation Envoyé par Matthieu76 Voir le message
C'est quoi ce sondage ? Il manque des principaux compilateurs tel que MinGW, MSVC compiler, et j'en oublie sûrement d'autres...
  • MSVC, c'est le compilateur de Visual C++.
  • Mingw est un portage Windows de GCC.


Citation Envoyé par RyzenOC Voir le message
autre: Intel C++ Compilers, c'est celui qui offre les meilleurs perf
Il faut se méfier des déclaration péremptoires dans le domaine des performance des compilateurs. Les micro benchmark, peuvent facilement donner l'avantage à un compilateur ou l'autre suivant les cas. L'écart global est rarement énorme.

C'est vrai que le compilateur Intel a longtemps eu la réputation d'être sensiblement meilleur, mais les autres compilateurs ont globalement comblé leur retard.
Avatar de RyzenOC RyzenOC - Inactif https://www.developpez.com
le 06/03/2018 à 16:11
Citation Envoyé par Uther Voir le message

Il faut ce méfier des déclaration péremptoires dans le domaine des performance des compilateurs.
C'est vrai que le compilateur Intel a longtemps eu la réputation d'être sensiblement meilleur, mais les autres compilateurs ont globalement comblé leur retard.

Les micro benchmark, peuvent facilement donner l'avantage à un compilateur ou l'autre suivant les cas. L'écart global est rarement énorme.

J'utilise beaucoup l'AVX512, et actuellement que se soit sur des cpu x86 intel (ou amd ) c'est avec celui la que j'ai les meilleurs perf.
Niveau benchmark tu as par exemple GYSELA, Stream et HPL
Avatar de Xelland Xelland - Membre actif https://www.developpez.com
le 06/03/2018 à 20:56
Il y en a qui ont regardé au niveau de l'assembleur généré ?

J'avais regardé avec MSVC et MingW sur le même fichier source. (juste les différences au niveau du code généré, je n'avais pas regardé les perfs)
A part dans la gestion de la pile, les différences ne sont pas énormes

Pour MingW, le code généré était assez "proche" du source
par contre pour MSVC, il y avait un peu plus de modifications du code
Avatar de Aurelien.Regat-Barrel Aurelien.Regat-Barrel - Expert éminent https://www.developpez.com
le 06/03/2018 à 22:38
Il y a un très bon site spécialisé pour comparer le code assembleur généré par de nombreux compilos C++:
https://godbolt.org/

Intel C++ a la réputation d'être le meilleur pour tout ce qui relève de la vectorisation du code, donc typiquement ce qui touche au calcul intensif.

Mais à un niveau plus global, la performance va se jouer sur la capacité du compilo à inliner massivement et "applatir" les abstractions en particulier celles basées sur les templates ou plus récemment les fonction constexpr. Certains compilos (clang) savent même faire sauter les allocations dynamiques de certains objets.

Ainsi, perso, j'ai observé des écarts important à ce niveau entre VC++ et g++/clang. Et même ces deux là, il y a un gros écart entre g++ 5.x et les version >= 6.

En général j'aime bien VC++, mais au niveau de constexpr en particulier, je peux observer qu'il est clairement en retard : clang et gcc optimisent dès qu'ils peuvent, alors que VC++ il faut lui forcer la main. Idem au niveau de l'inlining de std::function. Ca peut faire un gros écart au final surtout si on adopte un style fonctionnel.
Avatar de chrtophe chrtophe - Responsable Systèmes https://www.developpez.com
le 14/03/2018 à 21:26
Je pense que le compilateur Intel fait du code optimisé Intel. Il faudrait voir ce qu'il vaut avec les CPU non Intel.
Avatar de Uther Uther - Expert éminent https://www.developpez.com
le 15/03/2018 à 7:59
C'est simple, il ne les gère tout simplement pas. Les compilateur Intel ne gère que les processeur Intel compatibles : x86, x86_64 et Itanium.
Contacter le responsable de la rubrique Accueil