Библиотека C/C++ разработчика | cpp, boost, qt
20.7K subscribers
1.63K photos
44 videos
16 files
3.82K links
Все самое полезное для плюсовика и сишника в одном канале.

По рекламе: @proglib_adv

Учиться у нас: https://proglib.io/w/d6cd2932

Для обратной связи: @proglibrary_feeedback_bot

РКН: https://gosuslugi.ru/snet/67a5bac324c8ba6dcaa1ad17
加入频道
🔥 Сжатие ipv4 заголовков C++

💡 На Хабре вышла новая статья в которой автор делится своим опытом решения задачи сжатия IPv4 заголовков в условиях спутниковой связи с нестабильной работой и ограниченной пропускной способностью.

❗️ Ключевые моменты статьи:

• использование метода избыточности для отбрасывания идентичных данных в группах заголовков
• создание системы эталонных заголовков для восстановления сжатых пакетов
• достижение более 50% сжатия при сохранении полной функциональности

Основной фокус — практическая реализация компрессора/декомпрессора через tun интерфейс с детальным разбором алгоритма работы с первым полным пакетом и последующими сжатыми.

Особенно актуально для разработчиков, работающих с сетевыми протоколами в условиях ограниченной пропускной способности.

Вы узнаете, что даже стандартный 20-байтный IPv4 заголовок можно сократить до 9 байт без потери функциональности, используя умное кеширование эталонов.

👉 Статья

Библиотека C/C++ разработчика
🔍 Memory leaks в C++

Программа ест все больше памяти? Скорее всего у вас memory leak. Это не приговор и можно исправить, и вот как🙂


📝 Пошаговое решение:

- Используйте Valgrind или AddressSanitizer
- Найдите несоответствие new/delete
- Замените сырые указатели на smart pointers
- Проверьте циклические ссылки

//  Проблемный код
void problematic() {
int* data = new int[1000];
if (some_condition) {
return; // Утечка памяти!
}
delete[] data;
}

// Исправленный код
void fixed() {
auto data = std::make_unique<int[]>(1000);
if (some_condition) {
return; // Память освободится автоматически
}
}



⚠️ Частые ошибки:

- Забывают delete при раннем return
- Путают delete и delete[]


💡 Совет:

- Компилируйте с флагом -fsanitize=address для автоматического поиска утечек.

Библиотека C/C++ разработчика #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👾 AI-агенты — настоящее, о котором все говорят

На днях мы анонсировали наш новый курс AI-агенты для DS-специалистов 🎉

Это продвинутая программа для тех, кто хочет получить прикладной опыт с LLM и решать сложные задачи!

На обучении вы соберете полноценные LLM-системы с учётом особенностей доменных областей, получите hands-on навыки RAG, Crew-AI / Autogen / LangGraph и агентов.

🎓 В рамках курса вы научитесь:
— адаптировать LLM под разные предметные области и данные
— собирать свою RAG-систему: от ретривера и реранкера до генератора и оценки качества
— строить AI-агентов с нуля — на основе сценариев, функций и взаимодействия с внешней средой

Разберете реальные кейсы и научитесь применять похожие подходы в разных доменных областях, получите фундамент для уверенного прохождения NLP system design интервью и перехода на следующий грейд.

Старт 5 июля, а при оплате до 1 июня действует дополнительная скидка и бонус — эксклюзивный лонгрид по API и ML от Proglib.

Начните осваивать тему уже сейчас 👉 https://clc.to/Cttu7A
Библиотека C/C++ разработчика | cpp, boost, qt pinned «👾 AI-агенты — настоящее, о котором все говорят На днях мы анонсировали наш новый курс AI-агенты для DS-специалистов 🎉 Это продвинутая программа для тех, кто хочет получить прикладной опыт с LLM и решать сложные задачи! На обучении вы соберете полноценные…»
⚡️ GDB: отладка без перекомпиляции

Сколько раз ты менял код, добавляя printf для отладки, а потом забывал их удалить перед коммитом?

Решение: Условные breakpoint'ы в GDB

$ gdb ./your_program
(gdb) break main.cpp:42 if user_id == 123
(gdb) run


GDB остановится только когда user_id равен 123!

Ещё круче:

- (gdb) commands 1 - добавить команды к breakpoint'у
- (gdb) watch variable_name - остановка при изменении переменной

Бонус: set print pretty on сделает вывод структур читаемым 🎯

Попробуй прямо сейчас и напиши, сколько printf удалил из кода😄

Библиотека C/C++ разработчика #буст
😎 Оптимизации и паттерны userver

💡 Антон Полухин из команды uServer делится реальными кейсами системных оптимизаций C++, которые помогли сэкономить гигабайты памяти и значительно ускорить работу.

Ключевые моменты доклада:

• избавление от shared_ptr через продление времени жизни объектов до завершения приложения
• экономия памяти через ленивую аллокацию виртуального адресного пространства в пулах корутин
• правильная балансировка нагрузки между event-тредами для чтения и записи

Основной фокус — практические решения для реальных продакшн-систем, где каждая микросекунда на горячем пути и каждый мегабайт памяти имеют значение.

Особенно актуально для разработчиков высоконагруженных серверных приложений и тех, кто работает с фреймворками типа uServer.

Вы узнаете, что иногда «неэкономия» ресурсов и отказ от умных указателей могут дать больший прирост производительности, чем классические подходы оптимизации.

👉 Доклад

Библиотека C/C++ разработчика
Последние 2 дня скидки на курс «AI-агенты для DS-специалистов»

Пока большинство дата-сайентистов строят модели и делают аналитику, рынок уже требует специалистов, которые создают автономные системы на базе ИИ-агентов.

Для этого мы подготовили специальный курс и собрали кучу дополнительного контента, который поможет погрузиться в тему еще глубже. Но чтобы получить все плюшки, успевайте до 1 июня.

🎁 Что вы получите при оплате курса до 1 июня:
— Промокод PROGLIBAIна 10 000 ₽ на курс, чтобы изучать AI-агентов еще выгоднее
— Эксклюзивный лонгрид по API и ML от Proglib

💡Что разберем на курсе «AI-агенты для DS-специалистов»:
— Реализацию памяти в цепочках langchain
— Полный пайплайн RAG-системы с оценкой качества
— Основы мультиагентных систем (MAS)
— Протокол MCP и фреймворк FastMCP

Промокод также действует на курсы «Математика для Data Science» и «Алгоритмы и структуры данных».

👉 Успейте до 1 июня: https://clc.to/Cttu7A
Что мы загадали в ребусе ?

Угадай слово и напиши в комментариях 👇


Библиотека C/C++ разработчика #междусобойчик
🚨 Что на самом деле происходит с увольнениями в ИТ

Каждый день в чатах разработчиков появляются сообщения «ищу работу», «команду сократили», «проект закрыли». Но никто не говорит о причинах и масштабах катастрофы. Мы запустили большое исследование, чтобы раскрыть правду!

🎯 Что мы выясним:
→ Реальные причины увольнений
→ Сколько времени нужно на поиск работы
→ Самые безумные истории смены работы

Понимая реальную ситуацию, мы сможем принимать взвешенные решения о карьере и не попасться на удочку HR-сказок.

👉 Пройдите опрос за 3 минуты и помогите всему сообществу: https://clc.to/yJ5krg
📰 Свеженькое из мира C++

Недельный дайджест новостей о разных аспектах программирования и интересных проектах в мире C++.


🥳 Интересное:
Сжатие ipv4 заголовков C++
Memory leaks в C++
GDB: отладка без перекомпиляции
Оптимизации и паттерны userver

😎 Полезное:

ccache — компилятор кэш для ускорения пересборки проектов
ТОП 10 трюков на C++, которые облегчат вам жизнь
Рефакторинг длинных функций


🖨 Интересные проекты

DuckDB
DuckDB — это встраиваемая колоночная СУБД, ориентированная на аналитическую обработку данных (OLAP)

Notepad Next
Кроссплатформенная реализация Notepad++

Zeek
Платформа для анализа сетевого трафика и мониторинга безопасности

yaml-cp
yaml-cpp — это анализатор и генератор YAML написанный на C++

Библиотека C/C++ разработчика #свежак
Какая структура данных лежит в основе алгоритма поиска в ширину (BFS)?
Anonymous Quiz
13%
Стек
25%
Очередь
50%
Дерево
12%
Хеш-таблица
🧱 Топ-вакансий для C++разработчиков за неделю

Разработчик C++ в команду Perception — Офис (Москва)

Эксперт С++ в команду беспилотной технологии — Удалёнка

Разработчик Windows Low Level C/C++ — от 280 000 до 380 000 ₽ Удалёнка

Бэкенд-разработчик (C++, Python) — 250 000 —‍ 500 000 ₽ Удалёнка

C++ Developer — 5 000 —‍ 15 000 $ Удалёнка

👉 Еще больше топовых вакансий — в нашем канале C++ jobs

Библиотека C/C++ разработчика
🗃 Работа с файлами и файловой системой в C++17

Хочешь получить список файлов в папке? std::filesystem предоставляет удобные итераторы для обхода директории. Особенно полезно при создании загрузчиков ассетов, инструментов или скриптов, работающих с файлами.


✏️ Решение:

1. заголовочный файл <filesystem>
2. Используй directory_iterator для обхода содержимого папки
3. Проверь тип объекта (файл, директория и т.д.), если нужно отфильтровать только файлы

#include <iostream>
#include <filesystem>

namespace fs = std::filesystem;

int main() {
std::string path = "."; // текущая директория

for (const auto& entry : fs::directory_iterator(path)) {
if (fs::is_regular_file(entry)) {
std::cout << "Файл: " << entry.path() << std::endl;
}
else if (fs::is_directory(entry)) {
std::cout << "Папка: " << entry.path() << std::endl;
}
}

return 0;
}



⚠️ Возможные ошибки:

- Подключение <experimental/filesystem> вместо стандартного <filesystem> (устарело в C++17)
- Отсутствие обработки исключений — доступ к некоторым директориям может быть запрещён


Совет:

- Добавь try-catch вокруг итератора, если работаешь с произвольными путями
- Также удобно фильтровать файлы по расширению:
if (entry.path().extension() == ".cpp")



Библиотека C/C++ разработчика #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
🤝 Как вызвать Python из C — гайд для ресерчеров и хардкорных разработчиков

Если вы пишете код на C и Python, рано или поздно возникнет задача: как вызывать Python из C? Особенно если вы работаете с AI-исследованиями, Tensorflow, или хотите встроить скрипты в уже существующий C-проект.

Вот краткое руководство:

1⃣ Подключить Python.h:
python3-config --includes


2⃣ Включить заголовочный файл в C:

В Cmain.c:
#include <Python.h>


3⃣ Скомпилировать:
gcc Cmain.c -I/usr/include/python3.8 -lpython3.8 -o Cmain.o


4⃣ Инициализировать интерпретатор:
setenv("PYTHONPATH", "./", 1);
Py_Initialize();
// ...
Py_Finalize();


5⃣ Импортировать модуль и вызывать функцию:
PyObject *module = PyImport_ImportModule("PythonFunctions");
PyObject *func = PyObject_GetAttrString(module, "PrintList");
PyObject_CallObject(func, args);


6⃣ Аргументы (списки, числа и пр.):
Создаём через PyList_New, PyLong_FromLong, PyTuple_Pack.

7⃣ Очистка памяти:
Не забываем про Py_XDECREF(...)

▶️ Подойдёт для:
📍Встраивания ML-логики в C
📍Быстрого прототипирования
📍Работы с TensorFlow C API

▶️ Полный гайд и файлы — в детальной статье: https://clc.to/ys3cjw

Библиотека питониста #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
⚡️ Команда дня: std::string_view

Работа со строками часто сопровождается лишними копированиями при передаче в функции, что негативно влияет на производительность.

std::string_view — невладеющее представление последовательности символов, которое избавляет от ненужных копирований строк.


🔴 До:

bool startsWith(const std::string& str, const std::string& prefix) {
return str.substr(0, prefix.length()) == prefix;
}



🟢 После:

bool startsWith(std::string_view str, std::string_view prefix) {
return str.substr(0, prefix.length()) == prefix;
}



❗️Примеры использования:

• Функции, принимающие строки для чтения
• Парсинг строк без копирования
• Работа с подстроками без создания новых объектов std::string


💡 Заменили уже const std::string& на std::string_view в своем коде?

Библиотека C/C++ разработчика #буст