С какими библиотеками C++ вы работали?

Ответ

Помимо стандартной библиотеки (STL), я активно использовал следующие библиотеки и фреймворки:

1. Boost: Это практически "расширенная стандартная библиотека". Я применял различные компоненты:

  • Boost.Asio для асинхронного сетевого и низкоуровневого I/O программирования.
  • Boost.Filesystem (теперь в std::filesystem) для кроссплатформенной работы с путями и файловой системой.
  • Boost.Spirit для написания парсеров прямо в C++ коде.
  • Boost.Optional, Boost.Variant (прототипы std::optional, std::variant).

    // Пример: асинхронный TCP-клиент с Boost.Asio
    #include <boost/asio.hpp>
    using boost::asio::ip::tcp;
    
    void async_connect(tcp::socket& socket, const std::string& host) {
        tcp::resolver resolver(socket.get_executor());
        auto endpoints = resolver.resolve(host, "http");
        boost::asio::async_connect(socket, endpoints,
            [](boost::system::error_code ec, tcp::endpoint) {
                if (!ec) std::cout << "Connected!n";
            });
    }

2. Фреймворки для GUI: Для разработки десктопных приложений работал с Qt. Использовал его сигналы-слоты, виджеты, модель представления для QTableView, а также QML для декларативного UI.

3. Специализированные библиотеки:

  • OpenSSL/libcrypto для реализации криптографических протоколов (TLS, хэши, шифрование).
  • Protocol Buffers (protobuf) для сериализации структурированных данных и межпроцессного взаимодействия (RPC).
  • gRPC как высокопроизводительный RPC-фреймворк поверх HTTP/2.
  • SQLite как встраиваемую СУБД для локального хранения данных.

4. Инструменты для сборки и тестирования: CMake для управления сборкой, Google Test для модульного тестирования, Conan как менеджер пакетов C++.

Ответ 18+ 🔞

Вот, бля, помимо стандартной библиотеки, с которой всё понятно, я ещё ворочал кучу других библиотек и фреймворков. Овердохуища всего, ёпта.

1. Boost. Это ж, бля, как вторая стандартная библиотека, только с перцем. Я там понатыкал всего:

  • Boost.Asio — когда надо было сетевую асинхронную хуйню городить, чтобы всё летало.
  • Boost.Filesystem (он теперь в стандарте, кстати) — чтобы не париться с путями на разных операционках.
  • Boost.Spirit — это вообще отдельная песня, когда парсеры прямо в коде пишешь, мозги выносит, но мощно.
  • Boost.Optional с Boost.Variant — это типа прототипы для std::optional и std::variant, пока их в стандарте не было.

    // Вот, смотри, как я асинхронно коннектился через Asio
    #include <boost/asio.hpp>
    using boost::asio::ip::tcp;
    
    void async_connect(tcp::socket& socket, const std::string& host) {
        tcp::resolver resolver(socket.get_executor());
        auto endpoints = resolver.resolve(host, "http");
        boost::asio::async_connect(socket, endpoints,
            [](boost::system::error_code ec, tcp::endpoint) {
                if (!ec) std::cout << "Connected!n";
            });
    }

2. Фреймворки под GUI. Тут, понятное дело, Qt рулит. Сигналы-слоты — просто пиздец как удобно, виджеты, QTableView с его моделью... А ещё QML — это когда интерфейс почти как на JavaScript пишешь, красота.

3. Спец-библиотеки, без которых никуда:

  • OpenSSL/libcrypto — когда надо всё зашифровать так, чтобы мамка не узнала. TLS там, хэши, шифрование — вся эта криптографическая муть.
  • Protocol Buffers (protobuf) — сериализация данных, чтоб их по сети гонять или на диск складывать. Удобно, ёпта.
  • gRPC — это уже поверх protobuf, чтоб удалённые вызовы делать. Быстро, на HTTP/2.
  • SQLite — лёгкая база данных прямо в процессе. Для локального хранилища — то, что надо.

4. Инструменты для сборки и тестирования. Ну, CMake — без него вообще нихуя не соберёшь сейчас. Google Test — чтобы тесты писать и не бздеть, что всё развалится. Conan — как менеджер пакетов, чтоб зависимости не вручную таскать. В общем, стандартный такой набор, без которого в серьёзном проекте делать нехуй.