Blog 3 min de lecture

Les fonctionnalités C++11/C++14/C++17 dans WinObjC : une étude de cas

Share this article
Les fonctionnalités C++11/C++14/C++17 dans WinObjC : une étude de cas

Dans un article précédent nous parlions de l'outil clang-tidy pour détecter où vous pouvez utiliser certaines nouvelles fonctionnalités C++11/C++14/C++17 afin de moderniser votre code source C++. Mais comment détecter facilement où les nouvelles fonctionnalités du C++ sont utilisées dans un projet ?

Facebook et Google font largement usage de C++11 dans leur code source. Folly de Facebook, comme nous l'avons découvert dans un article précédent, utilise presque toutes les fonctionnalités de C++11, et j'étais curieux de savoir si Microsoft utilise également la nouvelle norme C++11 dans son code open source.

Les projets open source de Microsoft se trouvent dans leur dépôt GitHub ; certains ne sont que des forks d'autres projets adaptés à leurs besoins, comme LLVM, Clang et OpenCV, et d'autres sont développés par leurs soins. Examinons l'un de ces projets pour voir si C++11 y a été adopté. Un bon candidat est l'un des derniers projets C/C++ open source de Microsoft : WinObjC.

Windows Bridge for iOS (également appelé WinObjC) est un projet open source de Microsoft qui fournit un environnement de développement Objective-C pour Visual Studio/Windows. WinObjC offre en outre une prise en charge de la compatibilité avec les API iOS.

Une façon de vérifier où C++11 est utilisé consiste à explorer chaque fichier source individuellement, ce qui peut prendre des heures, voire des jours, selon la taille du projet. Une autre solution consiste à utiliser Clang.

Clang et son puissant moteur de diagnostics à la rescousse.

L'équipe Clang s'efforce de fournir des messages d'erreur aussi clairs et informatifs que possible. Elle cherche à les rendre aussi conviviaux que possible pour un compilateur en ligne de commande. Pour ce faire, Clang indique précisément ce qui ne va pas dans le code. Cela est réalisé grâce à un moteur de diagnostics qui transforme les informations d'erreur en un message convivial.

Clang émet de nombreux types de diagnostics, et pour nos besoins, les plus intéressants ont une description de ce type : « XXX incompatible with C++98 »

Mais comment obtenir les diagnostics Clang pour une solution Visual Studio ?

La première option consiste à compiler vos projets avec Clang ; cependant, ce n'est pas une tâche facile — il faut en effet modifier votre processus de build pour utiliser Clang à la place du compilateur Microsoft.

La deuxième option consiste à analyser vos projets Visual Studio à l'aide de CppDepend, qui utilise Clang comme parseur frontal et rapporte tous ses diagnostics. CppDepend est gratuit pour la communauté open source.

Voici tous les diagnostics Clang pour la solution WinObjC.

win1

Dans notre cas, cependant, nous n'avons besoin que des diagnostics du type « incompatible with C++98 » ; vous pouvez facilement filtrer la requête précédente pour n'obtenir que ces diagnostics :

win2

Comme on peut le constater, les fonctionnalités nullptr et auto sont utilisées à de nombreux endroits du code source. Cependant, contrairement aux projets de Facebook et de Google, les fonctionnalités C++11 ne sont pas largement employées. En explorant les fichiers sources C++ de WinObjC, on constate aussi que le projet fait davantage appel aux extensions C++/CX.

Résumé:

Les nouvelles normes C++ sont de plus en plus utilisées de nos jours grâce à l'excellent travail de la communauté C++. Beaucoup de ces nouvelles fonctionnalités sont faciles à utiliser, et moderniser votre code C++ peut le rendre plus lisible et plus facile à maintenir.

Share this article