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

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

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

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

РКН: https://gosuslugi.ru/snet/67a5bac324c8ba6dcaa1ad17

#WXSSA
Download Telegram
🍬 std::expected<T,E>: почему это не просто «optional с ошибкой»

C++23 принёс std::expected. Это не обёртка над optional — это принципиально другая семантика, которую важно понять сразу.

✏️ Структурная разница

std::optional<T> // возвращает  «значение или ничего»
std::expected<T,E> // возвращает «значение или причина отсутствия»


С его помощью можно вернуть код ошибки

expected<int, ErrorCode> parse(string s); // Пустой optional говорит «нет». Expected говорит «нет, потому что...»


❗️Под капотом

expected<T,E> — это discriminated union из T и E с флагом. Размер: max(sizeof(T), sizeof(E)) + 1 байт на флаг. Аналогично variant<T, unexpected<E>>.


💡 Когда выбирать expected

Если caller должен знать причину — expected. Если причина не важна — optional. Если ошибка аномальна и не должна обрабатываться в каждой точке — исключение. Это три разных инструмента для трёх разных ситуаций.


📍Навигация: ВакансииЗадачиСобесы

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

#под_капотом
Please open Telegram to view this post
VIEW IN TELEGRAM
👍72
😎 Топ-вакансий для C++ разработчиков за неделю

C++ разработчик — Удалёнка

C++ Developer (Search) — от 250 000 и до 400 000 ₽ Гибрид (Москва)

С разработчик — Удалёнка

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

📍Навигация: ВакансииЗадачиСобесы

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

#буст
👍1😁1
📖 Словарь айтишника: почему джун сидит на шадовинге, сеньор занимается гейткипингом, а тимлид — на бенче

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

👀 Читать дальше

📍Навигация: ВакансииЗадачиСобесы

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

#свежак
😁2👍1
💣 Задача на выходные: контекст с состоянием

Коллега написал менеджер транзакций. На code review всё выглядит норм — но остаётся ощущение, что тут есть баги 😸

class TransactionContext {
static TransactionContext* current;
std::vector<std::function<void()>> rollbacks;

public:
static TransactionContext& get() {
return *current;
}

void addRollback(std::function<void()> fn) {
rollbacks.push_back(fn);
}

TransactionContext() { current = this; }
~TransactionContext() {
for (auto& rb : rollbacks) rb();
current = nullptr;
}
};


🎯 Задание: Найди минимум 3 проблемы в этом коде.

🙂 Подумай: thread safety, исключения в деструкторах, вложенные транзакции.

📍Навигация: ВакансииЗадачиСобесы

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

#междусобойчик
Please open Telegram to view this post
VIEW IN TELEGRAM
3😁2👍1
📰 Свеженькое из мира C++

Подготовили подборку самых интересных материалов за неделю о разных аспектах программирования и интересных проектах в мире C++.

😎 Интересное:

Реферальный рекрутинг в IT — альтернативный способ устроиться на работу
Избавляемся от комментариев — способы очистки проекта от мёртвых комментариев
Язык Flame — новая надежда убить язык C++
std::expected — альтернатива std::optional возвращающая понятную ошибку
Словарь айтишника — немного сленга из мира IT

🔹📍Навигация: ВакансииЗадачиСобесы

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

#свежак
👍21
Современный C++ для встраиваемых систем

Доклад Рутвича Карканиса с CppCon — подробный разбор того, как использовать современный C++ в embedded-системах с ограниченными ресурсами: от базовой семантики до продвинутой оптимизации.

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

• динамический vs статический полиморфизм — скрытая стоимость виртуальных функций и vtable в условиях жёстких ограничений памяти
• шаблоны, концепции C++20 и SFINAE — как перенести максимум работы на этап компиляции и получить нулевые накладные расходы в рантайме
• управление памятью, placement new, volatile и атомарные операции — инструменты, без которых невозможно написать надёжный код для микроконтроллеров

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

📺 Доклад

📍Навигация: ВакансииЗадачиСобесы

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

#свежак
👍43👾2🥱1
Самый востребованный навык в ИТ в 2026-м — навык создания ИИ-агентов

Мы полностью переработали курс «Разработка AI-агентов» под реалии 2026 года. Никакой долгой теории — с самого начала пишем код. Обучать и делиться набитыми шишками будут эксперты-практики из Газпромбанка, Альфа-Банка и других бигтехов.

В программе:

— архитектура автономных систем с тестированием, ReAct-циклами и контролем токенов;
— практическая работа с актуальными фреймворками LangGraph, AutoGen, MCP и CrewAI;
— настройка продвинутого RAG для парсинга документов и точного поиска;
— внедрение решений с учётом действующего законодательства (152-ФЗ);
— дипломная работа, за основу которой можно взять свой рабочий проект или задачу, которую предложим мы.

Эксперты поделятся инсайтами из реального продакшна — тем, о чём вам никогда не расскажет ни одна нейросеть.

Запись первого открытого вебинара, на котором мы вместе с руководителем AI-направления в Альфа-Банке Полиной Полуниной пилили агента в прямом эфире.


Ах да, чуть не забыли! Дарим промокод AGENTSWEB на скидку 10 000 рублей и два курса сверху при покупке до 15 марта 🎁

Стать AI-инженером
😁21🥱1
🍪 std::mem_fn vs лямбда: что быстрее и почему это не то, что ты думаешь

С точки зрения assembly при включённой оптимизации (-O2) std::mem_fn и эквивалентная лямбда дают идентичный код. Оба являются callable с inline-дружественной структурой: компилятор видит конкретный тип и инлайнит вызов.

🍿 Разница появляется в контексте стирания типов. Если callable хранится в std::function<>:

// Лямбда — захват this в замыкании
std::function<int(Foo&)> f1 = [](Foo& x) { return x.bar(); };

// mem_fn — хранит pointer-to-member
std::function<int(Foo&)> f2 = std::mem_fn(&Foo::bar);


❗️ В обоих случаях std::function выполняет type erasure — heap-аллокацию для хранения callable (если он не влезает в Small Buffer Optimization, обычно ≤16 байт). Для mem_fn размер объекта — ровно размер pointer-to-member (8-16 байт), для лямбды без захвата — 1 байт. Оба влезают в SBO.

💡 Реальная разница — читаемость и семантика. std::mem_fn явно сигнализирует «это вызов метода». Лямбда гибче, но многословнее. В алгоритмах с однотипными вызовами mem_fn лаконичнее:

std::transform(v.begin(), v.end(), out.begin(), std::mem_fn(&Widget::value)); // vs лямбда


✏️ Используй mem_fn, когда хочешь выразить «вызов конкретного метода». Лямбду — когда нужна логика внутри.


📍Навигация: ВакансииЗадачиСобесы

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

#под_капотом
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🥱21🔥1
🚀 C++23 и дальше: насколько код может стать сладким

C++23 принёс ряд долгожданных улучшений. std::expected — альтернатива исключениям для обработки ошибок в функциональном стиле. std::print вместо printf и cout. Deducing this — явный доступ к *this в методах, открывающий новые паттерны.

На горизонте C++26: static reflection позволит исследовать типы во время компиляции с помощью обычного кода, без макросов. Это революционное изменение — сериализация, ORM, логирование смогут быть написаны на чистом C++ без кодогенерации.

Contracts — ещё одна ожидаемая фича: precondition, postcondition, assertion прямо в синтаксисе языка. Документация и проверка в одном месте, опционально проверяемая в runtime.

✏️ Какую фичу из планируемых в C++26 вы ждёте больше всего? И есть ли что-то, чего в языке, на ваш взгляд, всё ещё не хватает?


📍Навигация: ВакансииЗадачиСобесы

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

#междусобойчик
Please open Telegram to view this post
VIEW IN TELEGRAM
5🥱3👍1
У «Библиотеки программиста» появился резервный канал в мессенджере MAX

Он нужен исключительно для связи с теми, кто не может следить за обновлениями здесь из-за трудностей с доступом. Поэтому, если вы видите это сообщение, распространите его среди жильцов вашего ЖЭКа.

Контент в MAX будет дублировать телеграмный — основной нашей площадкой был и остаётся Telegram. Надеемся, это временная мера.

Подписаться на «Библиотеку программиста» в MAX
1😁14😢7🌚5👍1🥱1
Кажется, мы окончательно перешли от игрушек к суровому AgentOps

Приглашаем на наш обновлённый курс по разработке ИИ-агентов. Никакой воды про «будущее нейросетей», только инженерный подход.

На курсе мы:

— пошагово строим готовые системы на LangGraph, CrewAI и MCP;
— настраиваем кэширование и роутинг, чтобы бот не сожрал токены;
— разбираемся со стейтом, учимся дебажить через time-travel и прикручиваем human-in-the-loop;
— выводим RAG в прод так, чтобы безопасники не завернули архитектуру из-за 152-ФЗ.

В пекло скучные лекции про общую инфраструктуру — сразу фокусируемся на агентных фреймворках и написании кода. Занятия ведут бывалые лиды из Газпромбанка и Альфы, набившие шишки на реальных задачах.

Кстати, на днях мы пилили агента в прямом эфире, если пропустили — есть запись вебинара.


Сегодня последний день, когда можно забрать курс по старым ценам. Базовый тариф сейчас стоит 49 000 ₽ (вместо 62 990 ₽), продвинутый трек — 99 000 ₽ (вместо 124 990 ₽). Если не хочется отдавать всю сумму сразу, есть рассрочка. Торопитесь — на потоке осталось всего 5 мест!

Зафиксировать цену и перейти к сборке своих агентов
😁2
🤠 Почему опытным PM, PO и руководителям тоже нужен менторинг

Когда карьера уже сложилась, расти становится сложнее: привычные способы
развития перестают работать. Делюсь опытом менторства и наблюдениями о
том, как менторинг помогает PM, PO и руководителям пересобирать свои
управленческие решения.

👀 Читать дальше

📍Навигация: ВакансииЗадачиСобесы

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

#свежак
😁2
😎 Топ-вакансий для C++ разработчиков за неделю

Senior C/C++ Developer — от 280 000 ₽ Офис (Санкт-Петербург)

C/C++ developer — от 200 000 ₽ Удалёнка/гибрид (Москва)

Embedded C/C++ Developer (Middle) — от 250 000 и до 350 000 ₽ Офис (Москва)

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

📍Навигация: ВакансииЗадачиСобесы

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

#буст
😁2
🍬 Closure size и SBO: когда лямбда уходит в куч

Размер объекта-замыкания напрямую влияет на то, выделяется ли память в куче при хранении в std::function. Понимание Small Buffer Optimization критично для low-latency кода.

⚡️ std::function содержит внутренний буфер (обычно 16–32 байта в зависимости от реализации). Если closure влезает — heap allocation не происходит:

// sizeof closure = sizeof(int) = 4 байта → SBO
auto f1 = [x = 42]() { return x; };
std::function<int()> sf1 = f1; // нет heap allocation

// sizeof closure = 3 * sizeof(string) → возможно > SBO
std::string s1, s2, s3;
auto f2 = [s1, s2, s3]() { return s1 + s2 + s3; };
std::function<int()> sf2 = f2; // возможно heap allocation


🔍 Практическое правило: захватываешь больше 3-х примитивных значений — жди heap allocation. std::string, вектор, любой объект с указателем внутри — почти гарантия.

⚠️ Решения для latency-sensitive кода:

• std::move_only_function (C++23) — меньше overhead, нет копирования
• Ручной std::aligned_storage + placement new

❗️ SBO — деталь реализации стандартной библиотеки, не гарантированная стандартом. Для критичного кода измеряй, не предполагай. Конкретный порог зависит от libstdc++/libc++/MSVC STL.

📍Навигация: ВакансииЗадачиСобесы

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

#под_капотом
Please open Telegram to view this post
VIEW IN TELEGRAM
4👍3