Abseil para C++: guía completa con ejemplos

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Introducción a Abseil: qué es y para qué sirve

\n\n

Abseil (se pronuncia «ab-sil») es una biblioteca de código abierto para el lenguaje C++, desarrollada en Google. Está diseñada para complementar la biblioteca estándar de C++ (STL) y proporciona un conjunto de componentes de alta calidad, bien probados y eficientes que se utilizan internamente en Google para desarrollar prácticamente todos los proyectos en C++.

\n\n

¿Para qué sirve Abseil? Razones principales:

\n
    \n
  • Llenar los vacíos de STL: La biblioteca estándar de C++ evoluciona lentamente. Abseil ofrece soluciones listas para tareas que surgen a menudo en la práctica pero que aún no están incluidas en el estándar (por ejemplo, manejo de cadenas, flags de línea de comandos, tablas hash).
  • \n
  • Alto rendimiento: El código de Abseil está optimizado para procesadores y compiladores modernos. Muchos algoritmos están implementados teniendo en cuenta la memoria caché y las instrucciones SIMD.
  • \n
  • Seguridad y fiabilidad: La biblioteca se utiliza activamente en el entorno de producción de Google, lo que garantiza su estabilidad. Todas las funciones tienen una verificación estricta de límites y tipos.
  • \n
  • Compatibilidad: Abseil funciona con todos los compiladores principales (GCC, Clang, MSVC) y sistemas operativos (Linux, macOS, Windows).
  • \n
  • Modularidad: Puede utilizar solo los componentes que necesita, sin tener que incluir toda la biblioteca.
  • \n
\n\n

Abseil consta de varios módulos clave:

\n
    \n
  • absl/strings: Funciones avanzadas para trabajar con cadenas (división, unión, reemplazo, formato).
  • \n
  • absl/container: Contenedores adicionales (flat_hash_map, flat_hash_set, InlinedVector, etc.).
  • \n
  • absl/flags: Potente sistema para procesar flags de línea de comandos.
  • \n
  • absl/time: Manejo de tiempo y zonas horarias.
  • \n
  • absl/status: Manejo mejorado de errores (StatusOr, Status).
  • \n
  • absl/algorithm: Algoritmos adicionales (contains, clamp, etc.).
  • \n
\n\n

Instalación de Abseil

\n\n

A diferencia de Python o JavaScript, las bibliotecas de C++ no se instalan mediante pip o npm. Abseil se distribuye como código fuente que debe compilarse con CMake o Bazel. Veamos la forma más popular: la compilación con CMake.

\n\n

Instalación mediante vcpkg (recomendado para Windows)

\n

vcpkg es un gestor de paquetes para C++ de Microsoft.

\n
git clone https://github.com/Microsoft/vcpkg.git\ncd vcpkg\n.\\bootstrap-vcpkg.bat\n.\\vcpkg install abseil:x64-windows
\n\n

Instalación mediante Conan

\n

Conan es otro gestor de paquetes popular.

\n
pip install conan\nconan install abseil/20230801.0@
\n\n

Compilación manual con CMake

\n
git clone https://github.com/abseil/abseil-cpp.git\ncd abseil-cpp\nmkdir build && cd build\ncmake .. -DCMAKE_INSTALL_PREFIX=/usr/local\ncmake --build . --target install
\n\n

Vinculación en CMakeLists.txt

\n
find_package(absl REQUIRED)\ntarget_link_libraries(my_project\n    absl::strings\n    absl::flat_hash_map\n    absl::flags\n)
\n\n

Inicio rápido: ejemplo de código

\n\n

Escribamos un programa simple que use Abseil para trabajar con cadenas y flags de línea de comandos.

\n\n
#include <iostream>\n#include "absl/strings/str_join.h"\n#include "absl/flags/flag.h"\n#include "absl/flags/parse.h"\n\nABSL_FLAG(std::string, name, "World", "Nombre para el saludo");\n\nint main(int argc, char* argv[]) {\n    absl::ParseCommandLine(argc, argv);\n\n    std::vector<std::string> words = {"Hello", absl::GetFlag(FLAGS_name), "!"};\n    std::string greeting = absl::StrJoin(words, " ");\n\n    std::cout << greeting << std::endl;\n    return 0;\n}
\n\n

Compilación

Recommendations