Conçu en 1979, C++ est un langage de programmation à usage général qui dépasse maintenant les 40 ans. Loin de perdre du terrain, il se place toujours parmi les premiers sur plusieurs indices de popularité comme Tiobe, où il arrive en 4ème place, ou PYPL, qui le met à la 5ème place. Les éditeurs d’environnements de développement (IDE), de compilateurs, de frameworks de test, d’outils de qualité de code et autres facilitent largement son utilisation. Les développeurs de logiciels ont également à leur disposition de nombreuses bibliothèques pour les aider à créer des applications en C++. Voici une sélection de neuf d’entre elles.

- Active Template Library ou ATL. Ce jeu de classes C++ est développé par Microsoft pour bâtir des objets COM (Common Object Model) avec le support de fonctionnalités COM telles que les interfaces doubles, les interfaces énumérateurs COM standards, les points de connexion et les contrôles ActiveX. Disponible avec l’IDE Visual Studio, ATL peut être utiliser pour concevoir des objets à thread unique, des objets de modèle Apartment (cloisonné), ou des objets de modèle cloisonné et à thread libre.

Visual Studio affiche l’assistant de projet ATL pour le paramétrage de l’application. (Crédit/agrandir l'image : codesteps.com)

- Asio C++ Library. Cette bibliothèque est utilisé pour le réseau et pour la programmation de bas niveau sur les entrées/sorties, apportant un modèle asynchrone cohérent. Comme elle fournit les éléments de base pour la simultanéité, la mise en réseau C++ et autres types d’I/O, Asio a été utilisée pour des applications comme les apps pour smartphones, les jeux, mais aussi les sites web hautement interactifs et jusqu’aux systèmes de transactions en temps réel. Parmi les projets utilisant Asio, on trouve la bibliothèque WebSocketPP et le débogueur à distance DDT3 pour le langage Lua. Asio est disponible en open source sous licence Boost Software et supporté sur Linux, Windows, MacOS et FreeBSD. 

Asio fournit les éléments de base pour la mise en réseau C++, la simultanéité et d'autres types d'entrées/sorties. (Crédit : Asio/agrandir l'image)

- Cinder. Destiné au « creative coding », cette bibliothèque open source permet de développer des applications audio, graphiques et vidéo. Elle est également utilisée pour la géométrie algorithmique. Cinder prend en charge de façon native le fenêtrage et la gestion des événements, ainsi que l’abstraction I/O. Une API intégrée permet l’analyse syntaxique XML et JSON. Conçue autour des fonctionnalités idiomatiques de C++11 telles que shared_ptr, la bibliothèque est livrée avec de nombreux exemples. Cinder prend en charge MacOS, iOS, Linux, Windows et Windows UWP.

Beautiful Chaos est une application artistique expérimentale créée avec Cinder. Elle a été conçue pour le contrôleur de mouvement 3D Leap qui permet une interaction gestuelle avec un ordinateur. (Crédit : nathanselikoff.com)

- Eigen. Co-créée en 2008 par Gaël Guennebaud, de l’Inria, son principal mainteneur, et Benoît Jacob, Eigen est une bibliothèque C++ de modèles génériques pour l’algèbre linéaire (matrices, vecteurs, solveurs numérique et algorithmes associés). Sur la page du projet, Eigen est présenté comme polyvalent, rapide, fiable et élégant. Polyvalent car toutes les tailles de matrice sont supportées, depuis les petites matrices fixées jusqu’aux matrices arbitrairement grandes et denses. Tous les types numériques standards sont pris en charge. Côté rapidité, ces modèles d’expression permettent de supprimer intelligemment les objets temporaires et autorisent l’évaluation paresseuse (lazy evaluation) quand c’est approprié. Sa fiabilité repose sur des algorithmes « soigneusement » sélectionnés et clairement documentés. Téléchargeable sur la page du projet, Eigen est disponible sous licence publique Mozilla (MPL 2). Elle dispose d’une API décrite comme « extrêmement » propre et expressive, que les développeurs en C++ trouveront naturelle grâce aux modèles d’expression, est-il décrit. Sa suite de test a été exécutée sur de nombreux compilateurs pour garantir la fiabilité.

Un exemple de programme Eigen qui combine des matrices et des vecteurs. (agrandir l'image)

- FloatX, ou Float eXtended. Il s’agit d’une bibliothèque C++ de fichiers d’en-tête pour l’émulation de type à virgule flottante de faible précision. Bien que nativement compatible avec les compilateurs C++, FloatX peut être appelée par d’autres langages tels que Python ou Fortran. Les types à virgule flottante sont étendus au-delà des types natifs à simple et double précision (et demi sur certains matériels). Des types modèles sont fournis qui permettent à l’utilisateur de sélectionner le nombre de bits utilisés pour les exposants et significandes. Sur GitHub, on peut lire que l’idée de FloatX vient de la bibliothèque FlexFloat, mais au lieu de mettre en oeuvre la fonctionnalité dans C et de fournir des wrappers C++, FloatX est écrit complètement en C++ ce qui la rend plus naturelle pour l’utilisateur. En plus, FloatX fournit un surensemble des fonctionnalités de FlexFloat. La bibliothèque est issue de l’initiative Open Transprecision Computing. Elle est disponible sous licence Apache 2.0. 

FloatX fournit un sur-ensemble des fonctionnalités de FlexFloat. (Crédit : github.com/oprecomp/FloatX)

- OpenCV, ou Open Source Computer Vision Library. Cette bibliothèque de vision par ordinateur et d’apprentissage machine est écrite nativement en C++ et disponible sous licence BSD. Elle a été construite pour fournir une architecture commune aux applications de computer vision et accélérer l’utilisation de la perception artificielle dans les produits commerciaux. Avec plus de 2500 algorithmes optimisés pour la reconnaissance facile, la détection d’objets, la classification d’objets l’extraction de modèles 3D, la recherche d’image et autres capacités, OpenCV a fini par réunir une communauté d’utilisateurs de plus de 47 000 personnes. Accessible sur le site du projet, cette bibliothèque fournit des interfaces C++, Java, Python et Matlab. Elle supporte Windows, Linux, Android et MacOS. Des interface Cuda et OpenCL sont en développement.

Le site opencv.org propose un cours d'introduction aux bases des technologies de computer vision qui aborde le deep learning (Crédit : opencv.org).

- Poco (Portable Components) C++. Destinées à simplifier le développement en C++, ces bibliothèques sont trans-plateformes permettant de bâtir des applications Internet et réseau qui fonctionnent sur une gamme de systèmes incluant des ordinateurs de bureaux et des serveurs, des terminaux mobiles et des équipements IoT. Elles peuvent aussi être utilisées pour créer des microservices avec des API Rest pour l’apprentissage machine ou l’analyse de données. Les bibliothèques Poco sont semblables dans leur concept aux bibliothèques de classe Java, au framework .Net de Microsoft et à Cocoa d’Apple. Les développeurs peuvent les utiliser pour concevoir des applications serveurs en C++ qui peuvent parler à des bases de données SQL, Redis ou MongoDB, ou bien pour créer des logiciels pour des équipements IoT qui dialoguent avec des back-ends cloud. Parmi leurs fonctionnalités, on trouve un framework de cache, la gestion de formulaires HTML, un client FTP pour le transfert de fichiers et un serveur et client HTTP. Les bibliothèques Poco sont disponibles gratuitement sous licence logicielle Boost et téléchargeable depuis GitHub.

Début d’une séquence de code mettant en oeuvre un serveur web multithreaded simple servant une seule page HTML (Crédit : pocoproject.org / agrandir)

Windows Template Library (WTL). Venant au départ de Microsoft, la bibliothèque de modèles Windows, est en open source depuis 2004. Elle est utilisée pour créer des applications Windows légères et des composants d'interface utilisateur. Positionnée comme une alternative à la boîte à outils Microsoft Foundation Classes, WTL étend ATL et fournit un ensemble de classes pour les contrôles, les boîtes de dialogue, les fenêtres de cadre et les objets GDI.

WTL étend ATL avec un ensemble de modèles de classes pour créer des applications. Ci-dessus, extrait de WTL10_10320_R (Crédit : Microsoft)

- Wt. Avec cette bibliothèque d’interface graphique en C++ dit moderne, les développeurs peuvent concevoir des interfaces utilisateurs web avec des widgets sans avoir à écrire en JavaScript. Solution server-side, Wt prend en charge la gestion des requêtes et le rendu des pages, permettant de se concentrer sur les fonctionnalités. Elle fournit une sécurité intégrée, le rendu PDF, un système de dessin 2D et 3D, des bibliothèques de mapping d’objets relationnels et de chartes graphiques et un framework d’authentification. Le coeur de la bibliothèque est open source, il fournit un framework monopage(single-page) hybride qui peut être déployé sur Linux, Unix ou Windows. Développé par la société d’ingénierie logicielle belge Emweb, Wt est compatible avec les navigateurs HTML5 et HTML 4, de même qu’avec les agents utilisateurs plain HTML. Elle peut intégrer des bibliothèques JavaScript tierces. Avec Wt, une application est définie comme une hiérarchie de widgets, allant des génériques tels que les boutons jusqu’aux spécialisés, par exemple un widget de blog. L’arborescence des widgets est restituée au format HTML/JavaScript dans le navigateur. Wt peut être téléchargé depuis la page du projet. Les conditions d’utilisation open source et commerciale sont fournies.

Un Wimage est un widget qui affiche une image. L’image peut être spécifiée sous forme d’URL ou générée dynamiquement par une WResource. (Crédit : webtoolkit.eu)