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