📰 Свеженькое из мира C++
Подготовили подборку самых интересных материалов за неделю о разных аспектах программирования и интересных проектах в мире C++.
😎 Интересное:
• Современный C++ для встраиваемых систем — подробный разбор того, как использовать современный C++ в embedded-системах
• std::mem_fn vs лямбда — удобная альтернатива лямбдам для оборачивания методов
• C++23 и дальше — альтернатива исключениям для обработки ошибок в функциональном стиле
• Почему опытным PM, PO и руководителям тоже нужен менторинг — разбор, нужно ли дальнейшее развитие если ты уже PM
• Closure size и SBO: когда лямбда уходит в куч — ответ почему лямбда может оказаться в куче
• std::span — обёртка над массивами в C++26 стала ещё удобнее и появилось много полезных особенностей
• Почему локальные переменные «бесплатны» — описание почему локальные дешевле выделения памяти в куче
🔹📍Навигация: Вакансии • Задачи • Собесы
Библиотека C/C++ разработчика
#свежак
Подготовили подборку самых интересных материалов за неделю о разных аспектах программирования и интересных проектах в мире C++.
😎 Интересное:
• Современный C++ для встраиваемых систем — подробный разбор того, как использовать современный C++ в embedded-системах
• std::mem_fn vs лямбда — удобная альтернатива лямбдам для оборачивания методов
• C++23 и дальше — альтернатива исключениям для обработки ошибок в функциональном стиле
• Почему опытным PM, PO и руководителям тоже нужен менторинг — разбор, нужно ли дальнейшее развитие если ты уже PM
• Closure size и SBO: когда лямбда уходит в куч — ответ почему лямбда может оказаться в куче
• std::span — обёртка над массивами в C++26 стала ещё удобнее и появилось много полезных особенностей
• Почему локальные переменные «бесплатны» — описание почему локальные дешевле выделения памяти в куче
🔹📍Навигация: Вакансии • Задачи • Собесы
Библиотека C/C++ разработчика
#свежак
❤3😁2🥰1
Forwarded from Библиотека собеса по C++ | вопросы с собеседований
Какой механизм C++23 позволяет избежать лишних копирований при передаче объектов в функцию, не нарушая семантику значений?
Anonymous Quiz
22%
Явное перемещение через std::move
15%
Передача через const lvalue-ссылку
28%
Универсальная ссылка через T&&
17%
Deducing this
18%
Copy elision через NRVO
🌚9👍1😁1😢1👾1
🦴 Сколько стоит LOG_DEBUG()?
Автор статьи провёл benchmark четырёх популярных C++ библиотек логирования и выяснил, сколько на самом деле стоит один вызов
❗ Ключевые моменты статьи:
• разница в производительности между библиотеками достигает почти двух порядков
• даже отключённый лог имеет ненулевой overhead — библиотека всё равно проверяет уровень и готовит аргументы
• выбор API форматирования бьёт по скорости:
Основной фокус — null-benchmark: измерение стоимости самого вызова логирования, когда вывод отключён. Именно здесь разрыв между библиотеками оказывается максимальным.
Особенно актуально для сервисов, где логирование вызывается в горячем пути — миллионы раз в секунду из разных потоков.
🔹📍Навигация: Вакансии • Задачи • Собесы
Библиотека C/C++ разработчика
#свежак
Автор статьи провёл benchmark четырёх популярных C++ библиотек логирования и выяснил, сколько на самом деле стоит один вызов
LOG_INFO().❗ Ключевые моменты статьи:
• разница в производительности между библиотеками достигает почти двух порядков
• даже отключённый лог имеет ненулевой overhead — библиотека всё равно проверяет уровень и готовит аргументы
• выбор API форматирования бьёт по скорости:
iostream в 4–5 раз медленнее C-style printfОсновной фокус — null-benchmark: измерение стоимости самого вызова логирования, когда вывод отключён. Именно здесь разрыв между библиотеками оказывается максимальным.
Особенно актуально для сервисов, где логирование вызывается в горячем пути — миллионы раз в секунду из разных потоков.
🔹📍Навигация: Вакансии • Задачи • Собесы
Библиотека C/C++ разработчика
#свежак
😁1
Forwarded from Библиотека задач по C++ | тесты, код, задания
Forwarded from Библиотека задач по C++ | тесты, код, задания
Как корутина выделяет память для своего фрейма?
Anonymous Quiz
21%
Всегда на стеке вызывающего
20%
Всегда на куче, оптимизация стандартом не предусмотрена
11%
Через аллокатор, переданный первым аргументом
25%
На стеке, если размер фрейма известен на этапе компиляции
23%
Всегда через ::operator new, возможна оптимизация (HALO) компилятором
😁2❤1👍1🤩1
Корутина выделяет фрейм через
::operator new. Но этот вызов можно перехватить и направить в любой аллокатор — арену, пул, стек. Механизм называется coroutine allocator customization.Когда компилятор генерирует код запуска корутины, он ищет operator new в двух местах по порядку: сначала в типе
promise_type — если есть, использует его; затем глобальный ::operator new.struct MyPromise {
static void* operator new(std::size_t size) {
return my_pool.allocate(size);
}
static void operator delete(void* ptr, std::size_t size) {
my_pool.deallocate(ptr, size);
}
};Стандарт позволяет передать аргументы самой корутины в
operator new. Компилятор сначала пробует сигнатуру с аргументами:static void* operator new(std::size_t sz, Allocator& alloc, auto&&...) {
return alloc.allocate(sz);
}Это мощно: можно пробросить аллокатор как первый параметр корутины и использовать его для фрейма — без глобального состояния.
Если компилятор применяет
heap elision и вообще убирает аллокацию — ваш кастомный operator new не вызовется. Это нормально. Но если вы используете operator new для отладки размеров, убедитесь что оптимизация отключена (-O0 или [[clang::noinline]] на корутину).Кастомный аллокатор в корутинах даёт: lock-free аллокацию, аллокацию с арены (без освобождения по одному), размещение на стеке вызывающего. Последнее — буквально
O(1) без heap, если время жизни гарантировано.📍Навигация: Вакансии • Задачи • Собесы
Библиотека C/C++ разработчика
#под_капотом
Please open Telegram to view this post
VIEW IN TELEGRAM
❤6❤🔥3👍2😁1😢1
Forwarded from Библиотека джависта | Java, Spring, Maven, Hibernate
Представь, что есть цикл на 10 000 элементов, и баг воспроизводится только на одном конкретном объекте. Без Conditional Breakpoints придется жать F8 вручную сотни раз. А с ними дебаггер сам остановится в нужный момент.
🔹 Как включить
Кликни правой кнопкой на кружок брейкпоинта → появится поле Condition. Введите любое булево Java-выражение. Всё, дебаггер будет останавливаться только когда оно true.
🔹 Примеры из реальной жизни
▪️ Фильтрация по ID
user.getId() == 42
Останавливаемся только на конкретном пользователе — удобно при обработке списка сущностей из БД.
▪️ Фильтрация по содержимому строки
request.getUrl().contains("/admin")Отлавливаем только определённые HTTP-запросы в фильтре или интерцепторе.
▪️ Ловим NPE до того, как он случился
order.getItems() == null
Останавливаемся именно тогда, когда данные уже сломаны, а не после падения.
▪️ Условие по индексу в цикле
i == 999
Прыгаем сразу к последней итерации, не прокручивая весь цикл.
🔹 Продвинутые трюки
— Log message вместо остановки. Если не хотите прерывать выполнение, а просто логировать — в том же окне брейкпоинта включите "Evaluate and log" и введите выражение.
— Pass count. Чуть ниже в настройках брейкпоинта есть поле "Pass count" — брейкпоинт сработает только на N-м попадании.
— Disable until hit. Можно настроить цепочку: один брейкпоинт активирует другой. В настройках есть "Disable until breakpoint is hit" — указываете другой брейкпоинт, и текущий начнёт работать только после срабатывания того.
══════ Навигация ══════
Вакансии • Задачи • Собесы
#CoreJava
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
В классических итераторах
begin и end — один тип. В ranges конец диапазона может быть совершенно другим типом. Это ломает интуицию, но открывает возможности.🔍 Проблема однотипных итераторов
std::string::iterator для begin и end — одно и то же. Чтобы проверить конец, нужно держать два объекта одного размера и сравнивать их. Для C-строк это расточительно: \0 в памяти уже есть, но стандартный end — это полноценный указатель.⚡️ Sentinel как концепт
В ranges введён концепт
sentinel_for<S, I>: тип S является sentinel для итератора I, если их можно сравнивать оператором ==, даже если S != I.// Sentinel для null-terminated строки
struct null_sentinel {
bool operator==(const char* p) const { return *p == '\0'; }
};
// Теперь можно:
auto r = subrange(ptr, null_sentinel{});
💡 unreachable_sentinel
Специальный
std::unreachable_sentinel_t всегда возвращает false при сравнении — это сигнал компилятору, что конец никогда не достигается в данной ветке. Используется в take_view и counted_iterator, чтобы избежать лишних проверок в горячих циклах.auto v = std::views::counted(ptr, n);
// end() имеет тип unreachable_sentinel_t
// компилятор оптимизирует проверку конца
⚠️ Именно из-за разнотипных sentinel
std::ranges::distance работает за O(n) для forward-итераторов — он вынужден идти до sentinel, не зная расстояния заранее.Sentinel — это обобщение понятия «конец», а не просто переименование end().📍Навигация: Вакансии • Задачи • Собесы
Библиотека C/C++ разработчика
#под_капотом
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7👾1
😎 Топ-вакансий для C++ разработчиков за неделю
Senior Embedded Software Engineer — от 350 000 ₽ Удалёнка
Middle+/Senior C++ Developer —от 2500 и до 3500 $ Удалёнка
C/C++ developer — от 200000 ₽ Удалёнка/гибрид (Москва)
✍️ Еще больше топовых вакансий — в нашем канале C++ jobs
📍Навигация: Вакансии • Задачи • Собесы
Библиотека C/C++ разработчика
#буст
Senior Embedded Software Engineer — от 350 000 ₽ Удалёнка
Middle+/Senior C++ Developer —от 2500 и до 3500 $ Удалёнка
C/C++ developer — от 200000 ₽ Удалёнка/гибрид (Москва)
✍️ Еще больше топовых вакансий — в нашем канале C++ jobs
📍Навигация: Вакансии • Задачи • Собесы
Библиотека C/C++ разработчика
#буст
😁2
🚀 Вышел Qt 6.11
23 марта Qt Company выпустила Qt 6.11 — промежуточный релиз стабильной ветки Qt 6. Полгода публичной поддержки + ещё полгода для коммерческих пользователей.
🦴 Главное в релизе:
🎨 Qt Canvas Painter — новый модуль для аппаратно ускоренной 2D-отрисовки через RHI (OpenGL, Vulkan, Metal, Direct3D). В тестах обгоняет QPainter+OpenGL: в 2× на ноутбуке, в 5× на бюджетном Android-планшете, в 10× на флагманском Samsung Galaxy Tab S8
🌐 Qt WebEngine — поддержка расширений Chromium
🔊 PipeWire — встроенный аудиобэкенд
🎮 Qt Quick 3D — добавлены SSGI и SSR (реалистичное освещение и отражения в реальном времени), улучшено сглаживание движущихся объектов
📊 Qt Graphs — новый тип CustomSeries для произвольных графиков, поддержка нескольких осей в 3D-графиках, пример Wind Turbine Dashboard
⚡️ Qt TaskTree (экспериментальный) — декларативный подход к асинхронным задачам на C++.
🔗 Qt OpenAPI — генерация HTTP-клиентского кода из YAML-спецификации OpenAPI
📱 Android 16 + поддержка Google Play Feature Delivery для разбивки приложений на пакеты
🖼 SVG/Lottie — поддержка морфинг-анимации, масок и символов SVG, стабилизация Qt Quick VectorImage
✏️ Подробнее
📍Навигация: Вакансии • Задачи • Собесы
Библиотека C/C++ разработчика
#свежак
23 марта Qt Company выпустила Qt 6.11 — промежуточный релиз стабильной ветки Qt 6. Полгода публичной поддержки + ещё полгода для коммерческих пользователей.
🦴 Главное в релизе:
🎨 Qt Canvas Painter — новый модуль для аппаратно ускоренной 2D-отрисовки через RHI (OpenGL, Vulkan, Metal, Direct3D). В тестах обгоняет QPainter+OpenGL: в 2× на ноутбуке, в 5× на бюджетном Android-планшете, в 10× на флагманском Samsung Galaxy Tab S8
🌐 Qt WebEngine — поддержка расширений Chromium
🔊 PipeWire — встроенный аудиобэкенд
🎮 Qt Quick 3D — добавлены SSGI и SSR (реалистичное освещение и отражения в реальном времени), улучшено сглаживание движущихся объектов
📊 Qt Graphs — новый тип CustomSeries для произвольных графиков, поддержка нескольких осей в 3D-графиках, пример Wind Turbine Dashboard
⚡️ Qt TaskTree (экспериментальный) — декларативный подход к асинхронным задачам на C++.
🔗 Qt OpenAPI — генерация HTTP-клиентского кода из YAML-спецификации OpenAPI
📱 Android 16 + поддержка Google Play Feature Delivery для разбивки приложений на пакеты
🖼 SVG/Lottie — поддержка морфинг-анимации, масок и символов SVG, стабилизация Qt Quick VectorImage
✏️ Подробнее
📍Навигация: Вакансии • Задачи • Собесы
Библиотека C/C++ разработчика
#свежак
🔥6👍2❤1🙏1
😱 Если ваш продукт не умеет отдавать данные в формате, понятном AI-агенту, то вас просто не существует
Скрипт не будет кликать по красивым кнопкам в браузере, он уйдёт к конкуренту с нормальным API. Перестроить архитектуру под машинных клиентов — это уже не хайп, а необходимое условие сохранения конкурентоспособности.
Как адаптировать продукт и не исчезнуть из выдачи:
— интегрировать
— научиться контролировать стоимость (лимиты, кэш, роутинг между моделями);
— настроить AgentOps: трейсинг, логирование и отлов регрессий.
Всё это ждёт вас на обновлённом курсе «Разработка AI-агентов». Мы специально сделали фокус на утилитарном инжиниринге и production-ready решениях.
Кстати, до 29 марта можно забрать курс с большой скидкой, и стоит поторопиться — мест на потоке всё меньше.
Зафиксировать цену и начать деплоить агентов без слива бюджета 👈
Скрипт не будет кликать по красивым кнопкам в браузере, он уйдёт к конкуренту с нормальным API. Перестроить архитектуру под машинных клиентов — это уже не хайп, а необходимое условие сохранения конкурентоспособности.
Как адаптировать продукт и не исчезнуть из выдачи:
— интегрировать
MCP и A2A-взаимодействие, чтобы агенты могли вас читать;— научиться контролировать стоимость (лимиты, кэш, роутинг между моделями);
— настроить AgentOps: трейсинг, логирование и отлов регрессий.
Всё это ждёт вас на обновлённом курсе «Разработка AI-агентов». Мы специально сделали фокус на утилитарном инжиниринге и production-ready решениях.
Кстати, до 29 марта можно забрать курс с большой скидкой, и стоит поторопиться — мест на потоке всё меньше.
Зафиксировать цену и начать деплоить агентов без слива бюджета 👈
🥱6😁5🔥1
QuickCoderHub выкатил бесплатный браузерный генератор CMakeLists.txt для C++ проектов — никакой установки, работает полностью в браузере.❗️ Ключевые моменты инструмента:
• визуальная настройка и автогенерация
CMakeLists.txt прямо в браузере• нулевые зависимости — не нужно ничего устанавливать на машину
• мгновенный результат без ручного написания конфигурационных файлов
Основной фокус — убрать рутину настройки системы сборки и дать разработчику готовый
CMakeLists.txt под его проект за секунды.Удобно при старте нового проекта, на собеседованиях, или когда нужно быстро поднять сборку без погружения в документацию
CMake.📍Навигация: Вакансии • Задачи • Собесы
Библиотека C/C++ разработчика
#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13💯1
Forwarded from Библиотека задач по C++ | тесты, код, задания
🧩 Выходной челлендж: дочисти парсер команд
У тебя есть заготовка интерактивной оболочки — read-eval-print loop. Осталось дописать несколько ключевых частей.
Задача: заполни три TODO.
💬 Покажи своё решение — особенно интересны варианты с std::istringstream и ручным разбором.
📍Навигация: Вакансии • Задачи • Собесы
Библиотека C/C++ разработчика
#междусобойчик
У тебя есть заготовка интерактивной оболочки — read-eval-print loop. Осталось дописать несколько ключевых частей.
#include <iostream>
#include <sstream>
#include <vector>
#include <string>
std::vector<std::string> parseCommand(const std::string& line) {
// TODO: разбить строку на токены по пробелам
// Учти: несколько пробелов подряд — не ошибка
}
void execute(const std::vector<std::string>& tokens) {
if (tokens.empty()) return;
if (tokens[0] == "echo") {
// TODO: вывести все аргументы через пробел
} else if (tokens[0] == "exit") {
exit(0);
} else {
// TODO: вывести "Unknown command: <имя команды>"
}
}
int main() {
std::string line;
while (true) {
std::cout << "> ";
if (!std::getline(std::cin, line)) break;
execute(parseCommand(line));
}
}
Задача: заполни три TODO.
💬 Покажи своё решение — особенно интересны варианты с std::istringstream и ручным разбором.
📍Навигация: Вакансии • Задачи • Собесы
Библиотека C/C++ разработчика
#междусобойчик
😁3❤1
📰 Свеженькое из мира C++
Подготовили подборку самых интересных материалов за неделю о разных аспектах программирования и интересных проектах в мире C++.
😎 Интересное:
• Сколько стоит LOG_DEBUG()? — разбор на бэнчмарках сколько реально стоит отладка с помошью логов
• promise_type::operator new — удобное управление аллокациями корутин
• IntelliJ IDEA: продвинутый дебаг — удобный дебаг в IDE от JetBrains
• sentinel_t — зачем ranges придумали конец диапазона как отдельный тип
• Вышел Qt 6.11 — добавили много полезного функционала
• Генератор от QuickCoderHub — бесплатный генератор CMakeLists.txt с удобным UI
🔹📍Навигация: Вакансии • Задачи • Собесы
Библиотека C/C++ разработчика
#свежак
Подготовили подборку самых интересных материалов за неделю о разных аспектах программирования и интересных проектах в мире C++.
😎 Интересное:
• Сколько стоит LOG_DEBUG()? — разбор на бэнчмарках сколько реально стоит отладка с помошью логов
• promise_type::operator new — удобное управление аллокациями корутин
• IntelliJ IDEA: продвинутый дебаг — удобный дебаг в IDE от JetBrains
• sentinel_t — зачем ranges придумали конец диапазона как отдельный тип
• Вышел Qt 6.11 — добавили много полезного функционала
• Генератор от QuickCoderHub — бесплатный генератор CMakeLists.txt с удобным UI
🔹📍Навигация: Вакансии • Задачи • Собесы
Библиотека C/C++ разработчика
#свежак
👍1
👾 GDB: отладка без боли
Автор статьи разбирает GDB с нуля и показывает, как перестать бояться отладчика и находить баги за минуты, а не часы.
❗ Ключевые моменты статьи:
• как
• пошаговое выполнение кода с
• TUI-режим — визуальный интерфейс GDB, про который почти нет статей на русском
Основной фокус — практика: реальный пример с
Статья написана для тех, кто только начинает или до сих пор избегает отладчика. Никакой магии — 80% задач решается 5–10 командами, которые разбираются по одной.
👉 Статья
📍Навигация: Вакансии • Задачи • Собесы
Библиотека C/C++ разработчика
#линкер_рекомендует
Автор статьи разбирает GDB с нуля и показывает, как перестать бояться отладчика и находить баги за минуты, а не часы.
❗ Ключевые моменты статьи:
• как
backtrace за секунды показывает точное место падения и стек вызовов• пошаговое выполнение кода с
next/step и просмотр значений переменных прямо в рантайме• TUI-режим — визуальный интерфейс GDB, про который почти нет статей на русском
Основной фокус — практика: реальный пример с
Segmentation fault, который cout не помог бы поймать, а GDB раскрывает за 15 секунд через bt и print.Статья написана для тех, кто только начинает или до сих пор избегает отладчика. Никакой магии — 80% задач решается 5–10 командами, которые разбираются по одной.
👉 Статья
📍Навигация: Вакансии • Задачи • Собесы
Библиотека C/C++ разработчика
#линкер_рекомендует
👍7
Forwarded from Библиотека задач по C++ | тесты, код, задания
Forwarded from Библиотека задач по C++ | тесты, код, задания
🤩6👾6
🧩 std::rotate_copy — зачем нужна копия, если есть rotate?
🔍 Под капотом:
Никакой магии. Никаких swap. Просто два последовательных копирования.
⚡ Сложность: O(n) с одним проходом данных, без дополнительной памяти (кроме выходного диапазона).
💡 Когда это важно:
⚠️ Диапазоны [first, last) и [result, ...) не должны перекрываться — иначе поведение не определено. В отличие от
❗️
📍Навигация: Вакансии • Задачи • Собесы
Библиотека C/C++ разработчика
#под_капотом
std::rotate_copy существует не для удобства — он закрывает конкретный случай, когда мутация исходника недопустима, но выделять промежуточный буфер вручную неудобно.std::vector<int> src = {1, 2, 3, 4, 5};
std::vector<int> dst(src.size());
std::rotate_copy(src.begin(), src.begin() + 2, src.end(), dst.begin());
// src: {1, 2, 3, 4, 5} — не тронут
// dst: {3, 4, 5, 1, 2}🔍 Под капотом:
rotate_copy — это ровно два вызова std::copy:auto out = std::copy(middle, last, result); // [middle, last) первыми
std::copy(first, middle, out); // [first, middle) следом
Никакой магии. Никаких swap. Просто два последовательных копирования.
⚡ Сложность: O(n) с одним проходом данных, без дополнительной памяти (кроме выходного диапазона).
💡 Когда это важно:
// Параллельная обработка: исходник читается несколькими потоками
std::rotate_copy(src.begin(), pivot, src.end(),
std::back_inserter(result));
⚠️ Диапазоны [first, last) и [result, ...) не должны перекрываться — иначе поведение не определено. В отличие от
std::rotate, который работает in-place и перекрытий нет по определению.rotate_copy — частный случай общего принципа STL: алгоритмы с суффиксом _copy не мутируют исходник и пишут в отдельный output iterator.📍Навигация: Вакансии • Задачи • Собесы
Библиотека C/C++ разработчика
#под_капотом
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤2