Introduction à Abseil : qu'est-ce que c'est et pourquoi l'utiliser ?
Abseil (prononcé « ab-sil ») est une bibliothèque open source pour le langage C++, développée par Google. Elle vient compléter la bibliothèque standard C++ (STL) en offrant un ensemble de composants de haute qualité, rigoureusement testés et performants, utilisés en interne chez Google pour la quasi-totalité de leurs projets C++.
Pourquoi utiliser Abseil ? Voici les principales raisons :
- Combler les lacunes de la STL : La bibliothèque standard C++ évolue lentement. Abseil propose des solutions prêtes à l'emploi pour des problèmes courants qui ne sont pas encore dans le standard (gestion des chaînes, flags en ligne de commande, tables de hachage).
- Haute performance : Le code d'Abseil est optimisé pour les processeurs et compilateurs modernes. De nombreux algorithmes tiennent compte du cache mémoire et des instructions SIMD.
- Sécurité et fiabilité : La bibliothèque est massivement utilisée en production chez Google, garantissant sa stabilité. Toutes les fonctions bénéficient de vérifications strictes des limites et des types.
- Compatibilité : Abseil fonctionne avec tous les compilateurs majeurs (GCC, Clang, MSVC) et systèmes d'exploitation (Linux, macOS, Windows).
- Modularité : Vous pouvez n'utiliser que les composants dont vous avez besoin, sans importer toute la bibliothèque.
Abseil est organisé en plusieurs modules clés :
- absl/strings : Fonctions avancées pour la manipulation de chaînes (découpage, concaténation, remplacement, formatage).
- absl/container : Conteneurs supplémentaires (flat_hash_map, flat_hash_set, InlinedVector, etc.).
- absl/flags : Système puissant pour gérer les arguments en ligne de commande.
- absl/time : Gestion du temps et des fuseaux horaires.
- absl/status : Gestion améliorée des erreurs (StatusOr, Status).
- absl/algorithm : Algorithmes supplémentaires (contains, clamp, etc.).
Installation d'Abseil
Contrairement à Python ou JavaScript, les bibliothèques C++ ne s'installent pas via pip ou npm. Abseil est distribué sous forme de code source à compiler avec CMake ou Bazel. Voici la méthode la plus courante : la compilation avec CMake.
Installation via vcpkg (recommandé pour Windows)
vcpkg est le gestionnaire de paquets C++ de Microsoft.
git clone https://github.com/Microsoft/vcpkg.git
cd vcpkg
.\bootstrap-vcpkg.bat
.\vcpkg install abseil:x64-windows
Installation via Conan
Conan est un autre gestionnaire de paquets très populaire.
pip install conan
conan install abseil/20230801.0@
Compilation manuelle avec CMake
git clone https://github.com/abseil/abseil-cpp.git
cd abseil-cpp
mkdir build && cd build
cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local
cmake --build . --target install
Intégration dans CMakeLists.txt
find_package(absl REQUIRED)
target_link_libraries(mon_projet
absl::strings
absl::flat_hash_map
absl::flags
)
Premiers pas : exemple de code
Écrivons un programme simple qui utilise Abseil pour manipuler des chaînes et des flags en ligne de commande.
#include <iostream>
#include "absl/strings/str_join.h"
#include "absl/flags/flag.h"
#include "absl/flags/parse.h"
ABSL_FLAG(std::string, name, "Monde", "Nom à saluer");
int main(int argc, char* argv[]) {
absl::ParseCommandLine(argc, argv);
std::vector<std::string> mots = {"Bonjour", absl::GetFlag(FLAGS_name), "!"};
std::string salutation = absl::StrJoin(mots, " ");
std::cout << salutation << std::endl;
return 0;
}
Compilation et exécution :
g++ -std=c++17 main.cpp -labsl_strings -labsl_flags