مقدمة عن Abseil: ما هي ولماذا تحتاجها
Abseil (تُنطق "أب-سيل") هي مكتبة مفتوحة المصدر للغة C++، تم تطويرها في Google. صُممت لتكملة المكتبة القياسية لـ C++ (STL) وتوفر مجموعة من المكونات عالية الجودة والمختبرة جيدًا والفعالة، والتي تُستخدم داخل Google لتطوير جميع مشاريع C++ تقريبًا.
لماذا تحتاج Abseil؟ الأسباب الرئيسية:
- سد الفجوات في STL: المكتبة القياسية لـ C++ تتطور ببطء. تقدم Abseil حلولاً جاهزة للمشكلات الشائعة في الممارسة العملية والتي لم تدخل المعيار بعد (مثل التعامل مع النصوص، وأعلام سطر الأوامر، وجداول التجزئة).
- أداء عالٍ: كود Abseil مُحسَّن للمعالجات والمُجمِّعات الحديثة. العديد من الخوارزميات تم تنفيذها مع مراعاة ذاكرة التخزين المؤقت وتعليمات SIMD.
- الأمان والموثوقية: المكتبة تُستخدم بنشاط في بيئة الإنتاج في Google، مما يضمن استقرارها. جميع الدوال لديها فحص صارم للحدود والأنواع.
- التوافق: تعمل Abseil مع جميع المُجمِّعات الرئيسية (GCC, Clang, MSVC) وأنظمة التشغيل (Linux, macOS, Windows).
- النمطية: يمكنك استخدام المكونات التي تحتاجها فقط دون ربط المكتبة بأكملها.
تتكون Abseil من عدة وحدات رئيسية:
- absl/strings: دوال متقدمة للتعامل مع النصوص (تقسيم، دمج، استبدال، تنسيق).
- absl/container: حاويات إضافية (flat_hash_map, flat_hash_set, InlinedVector، وغيرها).
- absl/flags: نظام قوي لمعالجة أعلام سطر الأوامر.
- absl/time: التعامل مع الوقت والمناطق الزمنية.
- absl/status: معالجة محسّنة للأخطاء (StatusOr, Status).
- absl/algorithm: خوارزميات إضافية (contains, clamp، وغيرها).
تثبيت Abseil
على عكس Python أو JavaScript، لا يتم تثبيت مكتبات C++ عبر pip أو npm. يتم توزيع Abseil ككود مصدري يجب بناؤه باستخدام CMake أو Bazel. دعنا نلقي نظرة على الطريقة الأكثر شيوعًا: البناء عبر CMake.
التثبيت عبر vcpkg (موصى به لنظام Windows)
vcpkg هو مدير حزم لـ C++ من Microsoft.
git clone https://github.com/Microsoft/vcpkg.git
cd vcpkg
.\bootstrap-vcpkg.bat
.\vcpkg install abseil:x64-windows
التثبيت عبر Conan
Conan هو مدير حزم شائع آخر.
pip install conan
conan install abseil/20230801.0@
البناء اليدوي عبر 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
الربط في ملف CMakeLists.txt
find_package(absl REQUIRED)
target_link_libraries(my_project
absl::strings
absl::flat_hash_map
absl::flags
)
بداية سريعة: مثال كود
لنكتب برنامجًا بسيطًا يستخدم Abseil للتعامل مع النصوص وأعلام سطر الأوامر.
#include <iostream>
#include "absl/strings/str_join.h"
#include "absl/flags/flag.h"
#include "absl/flags/parse.h"
ABSL_FLAG(std::string, name, "World", "الاسم للترحيب");
int main(int argc, char* argv[]) {
absl::ParseCommandLine(argc, argv);
std::vector<std::string> words = {"مرحبًا", absl::GetFlag(FLAGS_name), "!"};
std::string greeting = absl::StrJoin(words, " ");
std::cout << greeting << std::endl;
return 0;
}
الترجمة والتشغيل:
g++ -std=c++17 main.cpp -labsl_strings -labsl_flags