ru
Feedback
Библиотека C/C++ разработчика | cpp, boost, qt

Библиотека C/C++ разработчика | cpp, boost, qt

Открыть в Telegram

Все самое полезное для плюсовика и сишника в одном канале. По рекламе: @proglib_adv Учиться у нас: https://proglib.io/w/d6cd2932 Для обратной связи: @proglibrary_feeedback_bot РКН: https://gosuslugi.ru/snet/67a5bac324c8ba6dcaa1ad17

Больше
2025 год в цифрахsnowflakes fon
card fon
19 545
Подписчики
-1324 часа
-407 дней
-17130 день
Архив постов
🐸 Подборка вакансий для C++-разработчиков за неделю C++/Qt/QML-разработчик под Android (Транспорт) — от 250 000 ₽ Удалёнка Senior C++ engineer («Разработка ядер рекламной платформы») C++ Developer (Real-Time Audio Processing) — от 288 000 и до 320 000₽ Удалёнка Senior С++ Backend Developer (Поиск) — от 350 000 ₽ Удалёнка Разработчик графических приложений Qt/С++ — от 150 000 и до 250 000 ₽ Удалёнка System С++ developer — Офис (Москва) Библиотека C/C++ разработчика
Показать все...
👍 2🤩 1
Фото недоступноПоказать в Telegram
📍Навигация: ВакансииЗадачиСобесы Библиотека C/C++ разработчика #развлекалово
Показать все...
😁 14 1💯 1
Фото недоступноПоказать в Telegram
WANTED: C++ ЭКСПЕРТ Обвиняется в прямом управлении памятью и знании тёмных углов стандарта. Если ты выжил в мире плюсов и готов учить этому других — мы тебя ищем. Приметы: — в совершенстве владеет C/C++ (понимает логику Go или Java); — умеет писать производительный и безопасный код; — обладает терпением и талантом наставника; — хочет выйти на большую аудиторию Proglib. Награда: — вознаграждение за твой вклад в обучение; — статус признанного эксперта в комьюнити; — поддержка твоего личного бренда. Сдаться добровольно P.S. Знаешь «плюсовика», который знает слишком много? Сдай его нам.
Показать все...
🔥 1😁 1
Фото недоступноПоказать в Telegram
📕 Написал код на С++23, а он запустился на Windows 95...
Представь: пишешь код с модулями C++23 в Visual Studio 2026, жмёшь компиляцию... И получаешь exe для Windows 95.
Подробный разбор нестандартного подхода к ретро-программированию с использованием всех благ современного C++. ❗Основные шаги: • компиляция только в 32-bit x86 с отключёнными исключениями и STL • использование линкера от Visual C++ 6.0 для финальной сборки • создание минимальной реализации std с базовыми контейнерами Фокус на практическом применении — портирование проектов LDL и движка Arcanum на C++23 с сохранением поддержки Windows 98. Актуально для разработчиков, которые создают новые игры, моды и улучшения для старых систем в рамках комьюнити вроде Old-Games.ru. Главное преимущество — один и тот же код работает и на современной системе (для отладки), и на ретро-железе (для финального запуска). 👉 Статья Навигация: ВакансииЗадачиСобесы Библиотека C/C++ разработчика #свежак
Показать все...
star reaction 1🔥 8👾 7👍 3 1🥱 1
Фото недоступноПоказать в Telegram
🎅 Секретный Санта для айтишников от Proglib.academy Весь этот год команда Академии запускала курсы для айтишников. А под Новый год мы запускаем новый курс по ИИ-агентам и ставим под ёлку самый свежий стек 2025 года и обучение проектированию автономных нейросетевых экосистем — от LLM и ReAct-циклов до мультиагентных систем, LangGraph, AutoGen и продакшн-практик. 🎁 Хотим дарить подарки и приглашаем вас поучаствовать в конкурсе: 1️⃣ Упомяните курс Академии у себя в блоге. 2️⃣ Пришлите скрин сюда. 3️⃣ Получите секретный промокод на 10 000 ₽ при оплате любого курса. Подходит всё — соцсети, блоги, Telegram-каналы от 300 подписчиков и более. 🎄 Акция действует до Нового года. Win-win, всё как мы любим!
Показать все...
😁 1
🐥 Почему std::chrono::duration не хранит единицы измерения? duration<int, std::milli> не хранит информацию о миллисекундах. На самом деле это compile-time магия. ✅ Как это работает: duration — это просто обёртка над числом. Шаблонный параметр std::milli (он же std::ratio<1, 1000>) существует только на этапе компиляции.
duration<int64_t, std::milli> ms(1000);
// В памяти: просто int64_t со значением 1000
// Информации "это миллисекунды" в рантайме НЕТ
🍴 Механизм конверсии: Когда вы пишете duration_cast<seconds>(ms), компилятор вычисляет 1000 / 1000 = 1 на этапе компиляции через механизм std::ratio. Никаких делений в рантайме при конверсии целых периодов. Вывод: Zero-overhead абстракция. В release-сборке duration<int, milli> — это буквально int с type safety. Но осторожно: duration_cast может обрезать дробную часть при конверсии вниз. 📍Навигация: ВакансииЗадачиСобесы Библиотека C/C++ разработчика #под_капотом
Показать все...
👍 7
00:05
Видео недоступноПоказать в Telegram
AI-агенты: когда точность архитектуры важнее магии промптов Мы смотрим на ИИ как на инженерную задачу. Мы учим строить автономные системы с детерминированной логикой, контролем ресурсов и предсказуемым поведением. Основные темы: — управление состояниями в LangGraph для проектирования надёжных стейт-машин; — работа с данными через RAG-системы на базе векторных хранилищ; — автоматизация и мониторинг через связку n8n и LangSmith для полного аудита; — безопасность системы с внедрением Guardrails для защиты от некорректных запросов. Постройте масштабируемую AI-систему с инженерным подходом. Записаться на курс
Показать все...
Шаблоны_для_рилсов_и_stories_1080_x_1920_пикс_2025_12_18T093254.mp41.17 KB
😁 2 1
Фото недоступноПоказать в Telegram
Перевод: Правительство США рассекретило PoC (Proof of Concept) 📍Навигация: ВакансииЗадачиСобесы Библиотека C/C++ разработчика #развлекалово
Показать все...
😁 10 3
⚡️ От SFINAE к Concepts: эволюция метапрограммирования Compile-time магия прошла долгий путь от криптографического SFINAE к читаемым concepts. Эра 1: Классический SFINAE (C++98)
template<typename T>
typename std::enable_if<std::is_integral<T>::value, T>::type
increment(T value) {
    return value + 1;
}
// Что происходит? Кто знает...
Эра 2: Type traits (C++11/14)
template<typename T>
std::enable_if_t<std::is_integral_v<T>, T>
increment(T value) {
    return value + 1;
}
// Чуть лучше с _t и _v суффиксами
Эра 3: if constexpr (C++17)
template<typename T>
T process(T value) {
    if constexpr (std::is_integral_v<T>) {
        return value + 1;
    } else if constexpr (std::is_floating_point_v<T>) {
        return value * 1.1;
    } else {
        return value;
    }
}
// Читается как обычный код!
Эра 4: Concepts (C++20)
template<std::integral T>
T increment(T value) {
    return value + 1;
}

// Или
auto increment(std::integral auto value) {
    return value + 1;
}
// Красота и понятность!
😏 А какой подход вам больше нравится? Напиши в комментариях! 📍Навигация: ВакансииЗадачиСобесы Библиотека C/C++ разработчика #константная_правильность
Показать все...
🔥 10 2👍 1😁 1
Фото недоступноПоказать в Telegram
🤟 Путь к мечте продолжается Два года российские нейрохирурги отказывали мне в операции, запугивая последствиями. В итоге поехал в Казахстан — сделали две паллидотомии, которые «нельзя было делать». Речь на месте, здоровье улучшается. Параллельно учу C++ и ищу работу. История о том, как не сдаваться, когда система говорит «нет». 👉 Продолжение... 📍Навигация: ВакансииЗадачиСобесы Библиотека C/C++ разработчика #буст
Показать все...
6👍 4🙏 3
Repost from TgId: 1162036880
Фото недоступноПоказать в Telegram
😁 27 3👍 1
🔥 Почему throw не просто делает goto к catch-блоку?
Возможно ты думал, что исключение — это прыжок в код обработчика. На самом деле между throw и catch происходит сложный процесс деструкции объектов.
Stack Unwinding — это механизм раскрутки стека, который компилятор генерирует автоматически. Когда летит исключение, среда выполнения проходит назад по стеку вызовов и вызывает деструкторы всех локальных объектов в обратном порядке их создания. Компилятор создаёт специальные таблицы (exception tables в формате DWARF или SEH), которые содержат информацию о том, где какие объекты живут и какие деструкторы нужно вызвать. При броске исключения runtime читает эти таблицы и пошагово очищает стек.
void func() {
    Resource r1;  // деструктор будет вызван
    Resource r2;  // и этот тоже
    throw Error();
}
❌ Если во время раскрутки деструктор сам бросит исключение, вызывается std::terminate(). Поэтому правило: деструкторы должны быть noexcept. ❗️Stack unwinding гарантирует безопасность ресурсов, но имеет накладные расходы: даже если исключение не бросается, таблицы занимают место в бинарнике. В embedded-системах часто отключают исключения именно поэтому. 📍Навигация: ВакансииЗадачиСобесы Библиотека C/C++ разработчика #под_капотом
Показать все...
👍 6🥱 2 1
Фото недоступноПоказать в Telegram
Что под капотом у агентов? Вы привыкли работать с памятью и потоками напрямую. AI-агенты — это новый уровень абстракции, но проблемы там те же: оптимизация, задержки, стоимость вычислений. В новой версии курса «Разработка AI-агентов» мы добавили факультатив "Научный взгляд" и углубились в техническую часть. Для тех, кто любит хардкор:Optimization: RAG, векторный поиск, работа с контекстом. — System Design: Мультиагентные системы (AutoGen, LangGraph) как распределенные системы. — Infrastructure: Работа на реальном GPU-кластере (предоставляем доступ). Это знания, актуальные для 2026 года, когда AI будет встроен в каждое устройство. ⚡️ Акция 3 в 1: Берешь курс по агентам — получаешь два любых других бесплатно (например, Алгоритмы или Математику, чтобы понимать ML-базу). Upgrade your skills
Показать все...
😁 2
👀 Почему std::async может заблокировать ваш поток? Многие думают, что std::async всегда создаёт новый поток. На самом деле это не так. По умолчанию std::async использует политику запуска std::launch::async | std::launch::deferred. Это означает, что реализация сама решает, выполнить задачу асинхронно или отложить до вызова get().
auto future = std::async(heavy_task);
// Может НЕ запуститься прямо сейчас!
auto result = future.get(); // Тут может начать выполняться
🍴 Под капотом: При std::launch::deferred задача сохраняется как callable объект и выполняется синхронно при первом обращении к future. Никакого нового потока. ✏️ Что происходит в памяти: Создаётся shared state, хранящий либо результат, либо исключение. Deferred-задача живёт в виде объекта функции до момента вызова. 🧋Вывод: Если вам нужна гарантия параллельности, явно указывайте std::launch::async. Иначе рискуете получить синхронное выполнение там, где ожидали асинхронное.
auto future = std::async(std::launch::async, heavy_task);
📍Навигация: ВакансииЗадачиСобесы Библиотека C/C++ разработчика #под_капотом
Показать все...
👍 5 1
👀 Почему std::async может заблокировать ваш поток? Многие думают, что std::async всегда создаёт новый поток. На самом деле это не так. По умолчанию std::async использует политику запуска std::launch::async | std::launch::deferred. Это означает, что реализация сама решает, выполнить задачу асинхронно или отложить до вызова get(). auto future = std::async(heavy_task); // Может НЕ запуститься прямо сейчас! auto result = future.get(); // Тут может начать выполняться 🍴 Под капотом: При std::launch::deferred задача сохраняется как callable объект и выполняется синхронно при первом обращении к future. Никакого нового потока. ✏️ Что происходит в памяти: Создаётся shared state, хранящий либо результат, либо исключение. Deferred-задача живёт в виде объекта функции до момента вызова. 🧋Вывод: Если вам нужна гарантия параллельности, явно указывайте std::launch::async. Иначе рискуете получить синхронное выполнение там, где ожидали асинхронное. auto future = std::async(std::launch::async, heavy_task); 📍Навигация: Вакансии • Задачи • Собесы Библиотека C/C++ разработчика #под_капотом
Показать все...
Фото недоступноПоказать в Telegram
📰 Свеженькое из мира C++ Подготовили подборку самых интересных материалов за неделю о разных аспектах программирования и интересных проектах в мире C++. 😎 Интересное: Рализация своего ECS движка — разбор реализации hand-made ECS движка std::promise — move-only тип — описание проблемы с копированием std::promise 5 профессий в IT, которые появились благодаря ИИ — статья о том как ИИ создаёт профессии std::generator в C++23: как упростить код сопрограмм — доклад об использовании стандартного интерфейса, который превращает генерацию последовательностей в одну строку 🔹📍Навигация: ВакансииЗадачиСобесы Библиотека C/C++ разработчика #свежак
Показать все...
👍 1
Фото недоступноПоказать в Telegram
🎓 Твой опыт стоит дорого — стань экспертом Proglib Academy Чувствуешь, что накопил достаточно знаний, чтобы делиться ими с другими? Мы ищем сильных практиков, которые хотят попробовать себя в роли: — преподавателей; — авторов курсов; — наставников. Это возможность не только монетизировать экспертизу, но и прокачать личный бренд, структурировать собственные знания и вырастить новое поколение специалистов. 👉 Заполни короткую анкету
Показать все...
😁 3
Repost from TgId: 1940255915
Фото недоступноПоказать в Telegram
Вопрос: Можно ли получить stacktrace в constexpr контексте? Ответ: Нет! std::stacktrace::current() (C++23) не является constexpr функцией, так как stacktrace это runtime. Компилятор не имеет «call stack» во время компиляции в том же смысле.
Показать все...
👍 5 1
🐸 Подборка вакансий для C++-разработчиков за неделю C++ Developer (General Components / Sensors) — от 350 000 ₽ Офис/Гибрид (Москва) C++ Developer (Real-Time Audio Processing) — от 288 000 и до 320 000 gross Backend-разработчик — от 200 000 ₽ Удалёнка C++ Team Lead (3D Картa) — от 250 000 ₽ Удалёнка C++ Developer (Middle/Senior) — от 2 000 и до 4 000$ Удалёнка Senior C++ Software Engineer (SaaS) — от 4 000 $ Удалёнка Библиотека C/C++ разработчика
Показать все...
👍 2
Фото недоступноПоказать в Telegram
📍Навигация: ВакансииЗадачиСобесы Библиотека C/C++ разработчика #развлекалово
Показать все...
😁 8