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

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

الذهاب إلى القناة على Telegram

Все самое полезное для плюсовика и сишника в одном канале. Как запустить своего ии-агента: https://clc.to/tvpmDQ По рекламе: @proglib_adv Для обратной связи: @proglibrary_feeedback_bot РКН: https://gosuslugi.ru/snet/67a5bac324c8ba6dcaa1ad17 #WXSSA

إظهار المزيد

📈 نظرة تحليلية على قناة تيليجرام Библиотека C/C++ разработчика | cpp, boost, qt

تُعد قناة Библиотека C/C++ разработчика | cpp, boost, qt (@cppproglib) في القطاع اللغوي الروسية لاعباً نشطاً. يضم المجتمع حالياً 16 867 مشتركاً، محتلاً المرتبة 7 486 في فئة التكنولوجيات والتطبيقات والمرتبة 38 903 في منطقة روسيا.

📊 مؤشرات الجمهور والحراك

منذ تأسيسه في невідомо، حقق المشروع نمواً سريعاً وجمع 16 867 مشتركاً.

بحسب آخر البيانات بتاريخ 26 أغسطس, 2026، تحافظ القناة على نشاط مستقر. خلال آخر 30 يوماً تغيّر عدد الأعضاء بمقدار -98، وفي آخر 24 ساعة بمقدار 2، مع بقاء الوصول العام مرتفعاً.

  • حالة التحقق: غير موثّقة
  • معدل التفاعل (ER): يبلغ متوسط تفاعل الجمهور 8.43‎%. وخلال أول 24 ساعة من النشر يحصد المحتوى عادةً N/A‎% من ردود الفعل نسبةً إلى إجمالي المشتركين.
  • وصول المنشورات: يحصل كل منشور على متوسط 1 422 مشاهدة. وخلال اليوم الأول يجمع عادةً 0 مشاهدة.
  • التفاعلات والاستجابة: يتفاعل الجمهور بانتظام؛ متوسط التفاعلات لكل منشور يبلغ 3.
  • الاهتمامات الموضوعية: يركز المحتوى على مواضيع رئيسية مثل c++, навигация, компилятор, удалёнка, developer.

📝 الوصف وسياسة المحتوى

يصف المؤلف القناة بأنها مساحة للتعبير عن الآراء الذاتية:
Все самое полезное для плюсовика и сишника в одном канале. Как запустить своего ии-агента: https://clc.to/tvpmDQ По рекламе: @proglib_adv Для обратной связи: @proglibrary_feeedback_bot РКН: https://gosuslugi.ru/snet/67a5bac324c8ba6dcaa1ad17 #WXS...

بفضل وتيرة التحديث المرتفعة (أحدث البيانات بتاريخ 27 أغسطس, 2026) تحافظ القناة على حداثتها ومستوى وصول مرتفع. وتُظهر التحليلات تفاعلاً نشطاً من الجمهور، ما يجعلها نقطة تأثير مهمة ضمن فئة التكنولوجيات والتطبيقات.

16 867
المشتركون
+224 ساعات
-197 أيام
-9830 أيام
أرشيف المشاركات
✈️ C++26 наводит порядок в строковых литералах До C++26 строки, которые живут только на этапе компиляции, формально не отличались от обычных литералов — и компиляторы обрабатывали их кто во что горазд. • P2361R6 выделяет невычисляемые строки — те, что нужны только компилятору (static_assert, [[deprecated]], [[nodiscard]], _Pragma, #line, asm, имена литеральных операторов) и в исполняемый файл не попадают • Префикс кодировки (L, u8, u, U) на них теперь запрещён: static_assert(false, L"плохо") перестаёт компилироваться • Строка не переводится в целевую кодировку — компилятор хранит исходные символы как есть, для сообщений об ошибках • Из управляющих последовательностей остаются только имена символов Юникода и простые вроде \n и \t. Числовые (\x1B, \077) запрещены: в неизвестной кодировке толковать их нечем • Второй документ, P1854R4, наводит порядок в обычных литералах: непредставимые символы теперь ошибка, а не поведение на усмотрение реализации. И это исправление действует задним числом — вплоть до C++98 Формально это breaking changes. Но проверка более 90 миллионов строк открытого кода почти не нашла затронутых мест: единственные префиксы на таких строках обнаружились в тестах самого Clang. Цена миграции близка к нулю, выигрыш — предсказуемое поведение вместо зоопарка реализаций. ↗️ Пост ✏️ Натыкались ли вы хоть раз на L"..." в static_assert, или это чистка стандарта ради самой чистоты? 👇 📍Навигация: ВакансииЗадачиСобесыКанал в Max Библиотека C/C++ разработчика #буст

⛄️ Почему find_package(Foo) ищет в двух режимах? Многие думают, что find_package — это «одна команда, один поиск». На деле под капотом работает диспетчер двух разных механизмов, и путаница между ними — частая причина «package not found» при идеально установленной библиотеке. 🔍 Когда вы пишете find_package(Foo), CMake по умолчанию сначала запускает Module mode: ищет файл FindFoo.cmake сперва в CMAKE_MODULE_PATH, а затем во встроенных модулях самого CMake. Это скрипт-разведчик, который через find_path/find_library сам ищет заголовки и библиотеки на диске. ⚡️ Если модуль не найден, включается Config mode: CMake ищет FooConfig.cmake или foo-config.cmake — файл, который поставляет сам пакет и который точно знает, где что лежит. ❗️ Важно: это последовательный поиск с откатом, а не параллельный. И порядок можно перевернуть — с CMake 3.15 переменная CMAKE_FIND_PACKAGE_PREFER_CONFIG=ON заставляет сначала пробовать Config.
find_package(Foo)              # сначала Module, потом Config
find_package(Foo CONFIG)       # только Config mode
find_package(Foo MODULE)       # только Module mode
❗️ Ключевое различие: FindFoo.cmake пишет кто угодно, кроме автора пакета — потребитель, сторонний разработчик или сами разработчики CMake (так поставляются FindThreads, FindOpenSSL и т.д.), и он угадывает расположение. А FooConfig.cmake поставляет сам автор библиотеки, и он обычно отдаёт готовые импортированные таргеты (Foo::Foo) с уже прописанными путями, флагами и зависимостями. Поэтому Config mode почти всегда надёжнее. 💡 На практике: если современная библиотека (через install(EXPORT)) не находится — проверьте не CMAKE_MODULE_PATH, а CMAKE_PREFIX_PATH, потому что искать нужно именно Config-файл. 📍Навигация: ВакансииЗадачиСобесыКанал в Max Библиотека C/C++ разработчика #под_капотом

📉 Инфляция грейдов, смерть джунов, новая модель найма: что происходит с IT-рынком в 2026 году Представь лифт, который застря
📉 Инфляция грейдов, смерть джунов, новая модель найма: что происходит с IT-рынком в 2026 году Представь лифт, который застрял между этажами, а его двери завалили арматурой. Это и есть IT-рынок в 2026 году. Грейды ничего не значат, джунов не берут, кандидаты врут в резюме, компании завышают требования, а воронку найма пересобирают с нуля. Разбираемся, что пошло не так и как это чинят. 👉 Читать дальше 📍Навигация: ВакансииЗадачиСобесыКанал в Max Библиотека C/C++ разработчика #свежак

🥳 Алгоритмы диапазонов: Свёртки (fold) В прошлый раз модифицировали диапазоны — теперь сворачиваем их в одно значение. В C++23 появилось семейство fold_*, которое наконец заменяет std::accumulate и аккуратно выводит типы. 🍰 ranges::fold_left — свёртка слева
std::vector<int> v = {1, 2, 3, 4, 5};
int sum     = std::ranges::fold_left(v, 0, std::plus{});       // 15
int product = std::ranges::fold_left(v, 1, std::multiplies{}); // 120
Левоассоциативная свёртка: аккумулятор — левый аргумент операции, элемент — правый. По шагам это (((( 0+1 )+2 )+3 )+4 )+5. Начальное значение задаёте сами. 🥨 ranges::fold_left_first — первый элемент как начало
std::vector<int> v = {3, 1, 4, 1, 5};
auto max_val = std::ranges::fold_left_first(v, [](int a, int b){
return std::max(a, b);
});
// max_val == std::optional<int>{5}
То же самое, но начальным значением берётся первый элемент диапазона — отдельный init не нужен. Удобно для max/min, где придумывать «нейтральный» элемент неловко (Для готовых max/min, конечно, есть ranges::max — fold_left_first интересен произвольной операцией). ❗️ Возвращает std::optional: у пустого диапазона нет первого элемента, поэтому на пустом входе придёт std::nullopt. Не забудьте проверить перед разыменованием. 🥖 ranges::fold_right — свёртка справа
std::vector<int> v = {1, 2, 3};
int r = std::ranges::fold_right(v, 0, std::minus{});
// 1 - (2 - (3 - 0)) == 2
int l = std::ranges::fold_left(v, 0, std::minus{});
// ((0 - 1) - 2) - 3 == -6
Идёт с правого конца: result = f(1, f(2, f(3, 0))). Для коммутативных операций (plus, multiplies) результат совпадёт с fold_left, а для некоммутативных — нет, как видно по вычитанию. ❗️ У fold_right порядок аргументов операции зеркальный: вызывается f(элемент, аккумулятор), то есть элемент идёт первым, а не вторым. Для своих лямбд это легко перепутать. 🥯 ranges::fold_right_last — последний элемент как начало
std::vector<int> v = {1, 2, 3};
auto res = std::ranges::fold_right_last(v, std::minus{});
// 1 - (2 - 3) == 2, внутри std::optional<int>{2}
Зеркало fold_left_first: начальным значением берётся последний элемент, результат — тоже std::optional с тем же поведением на пустом диапазоне. 🧇 ranges::fold_left_with_iter — результат и итератор
std::vector<int> v = {1, 2, 3, 4, 5};
auto [in, value] = std::ranges::fold_left_with_iter(v, 0, std::plus{});
// value == 15
// in == v.end()
Возвращает не просто значение, а структуру с полями in (итератор конца обработки) и value. Полезно, когда после свёртки нужно знать, где именно остановились — например, при работе с подсчётами в потоке. ❗️ Несколько подводных камней • Главное отличие от accumulate — в том, как выводится тип накопления. У accumulate тип аккумулятора равен типу init, поэтому std::accumulate(vd.begin(), vd.end(), 0) на векторе double молча копит в int и теряет дробную часть. А fold_left выводит тип аккумулятора из РЕЗУЛЬТАТА операции (U = decay_t<invoke_result_t<F&, T, range_reference_t<R>>>), и здесь int-ный ноль на векторе double уже ничего не теряет: plus(int, double) даёт double, и всё копится в double.
std::vector<double> vd = {1.5, 2.5, 3.0};
auto s = std::ranges::fold_left(vd, 0, std::plus{});
// s == 7.0, а НЕ 6 — тип s выведен как double
// (то же самое через accumulate с init 0 дало бы int 6)
Это и есть причина, по которой fold_left лучше: он не обрезает молча. • fold_left довольствуется однопроходным input-диапазоном (годится для istream_view и прочих потоков), а fold_right требует bidirectional-диапазона — ему нужно дойти до конца и пойти обратно. Поэтому «свернуть справа» поток на лету не выйдет. • В отличие от remove, transform и copy_if из прошлого поста, свёртки НЕ принимают проекцию. «Свернуть по полю» одним аргументом не выйдет — нужна лямбда, которая сама достанет нужное:
std::vector<Task> tasks = { {"Код", 1}, {"Деплой", 2} };
int total = std::ranges::fold_left(tasks, 0,
[](int acc, const Task& t){ return acc + t.priority; });
// 3
📍Навигация: ВакансииЗадачиСобесыКанал в Max Библиотека C/C++ разработчика #константная_правильностьx

🔥 Инженерная методичка по ИИ от Романа Барлоса (Team Lead в Yandex Cloud) Продолжаем делиться экспертизой команды курса «Раз
🔥 Инженерная методичка по ИИ от Романа Барлоса (Team Lead в Yandex Cloud) Продолжаем делиться экспертизой команды курса «Разработка ИИ-агентов». Роман собрал мастхев-инструменты и ключевые работы для тех, кто хочет выйти за рамки вайбкодинга. 🛠️ Полезные инструменты:
Understand Anything — граф знаний по коду и зависимостям. • DeepTutor — open-source платформа для персонализированного обучения. • Superpowers — набор практик для системной разработки с ИИ. • Awesome Agent Skills — коллекция навыков для ИИ-агентов.
📚 Ключевые работы по LLM:
Attention Is All You Need (2017) — архитектура Transformer. • GPT-1 (2018) — начало эпохи GPT. • GPT-2 (2019) — решение новых задач без дообучения. • GPT-3 (2020) — обучение на примерах из запроса. • InstructGPT (2022) — RLHF и современные чат-боты.
На курсе Роман выступает консультантом программы: помогает формировать содержание уроков с опорой на актуальные инженерные практики». Занять свое место на потоке: 👉 Курс «Разработка ИИ-агентов»

🍴 Исследовательская задача: что именно изменил C++23 В C++23 приняли P2718R0 — и старый баг range-for тихо исчез. Но не для всех временных объектов и не безусловно.
std::vector<int> getData() { return {1, 2, 3}; }

for (int x : getData()           // временный 1
                 | filtered)     // вью поверх него
    std::cout << x;
✏️Задание (research): найди в документации/предложении ответы: 1️⃣ Жизнь каких именно временных объектов продлевает P2718R0? 2️⃣ Почему до C++23 пример выше был UB, а теперь — нет? 3️⃣ Остались ли случаи, где даже в C++23 ты получишь висячую ссылку? 📍Навигация: ВакансииЗадачиСобесыКанал в Max Библиотека C/C++ разработчика #константная_правильностьx

📰 Свеженькое из мира C++ Подготовили подборку самых интересных материалов за неделю о разных аспектах программирования и инт
📰 Свеженькое из мира C++ Подготовили подборку самых интересных материалов за неделю о разных аспектах программирования и интересных проектах в мире C++. 😎 Интересное: Как выдать shared_ptr на себя из метода? — решение проблемы передачи сырых указателей на самого себя 86Box 6.0: низкоуровневая эмуляция x86 как она есть — обновление полноценного эмуляторы для x86 платформы export: что именно вы отдаёте наружу? — разбираем способы экспорта из C++ модулей TypeScript без V8: AOT-компиляция в нативный бинарник — интересный подход по связыванию TypeScript с C++ кодом 📙 Ranges: Алгоритмы диапазонов: Алгоритмы модификации 🔹📍Навигация: ВакансииЗадачиСобесы Библиотека C/C++ разработчика #свежак

😎 Знакомьтесь с экспертом Proglib.academy: Senior Software Engineer и Team Lead в Yandex Cloud Роман Барлос Роман — консульт
😎 Знакомьтесь с экспертом Proglib.academy: Senior Software Engineer и Team Lead в Yandex Cloud Роман Барлос Роман — консультант нашего курса «Разработка ИИ-агентов». Он работает на стыке cloud-native архитектуры и AI, активно внедряя современные ИИ-подходы в реальные процессы разработки. За что его ценит IT-комьюнити? 🟣 Team Lead и AI-евангелист в команде UX Yandex Cloud
14-лет в разработке. Занимается AI-адопшеном в команде Yandex Cloud, проводит мастер-классы и продвигает лучшие практики для повышения эффективности разработчиков.
🟣 Техлид Sourcecraft Code Assistant
С сильным практическим бэкграундом принимал участие как технический лид в создании мощного AI-расширения для VS Code.
🟣 Создатель полезного Open Source
Разрабатывает утилиты, которые позволяют быстро начать эксперименты с инференсом и агентами в локальном окружении: например, набор скриптов vllm-setup для быстрого запуска окружения и mini-proxy — минималистичный прокси для OpenAI API провайдеров.
🟣 Автор интерактивных ML-визуализаций
Объясняет сложные концепции наглядно. Создал серию залипательных обучающих материалов, где можно вживую пощупать работу сетей Хопфилда, машин Больцмана и VC-размерности.
Роман регулярно делится инженерными наработками, инсайтами и экспертизой в своем авторском Telegram-канале На курсе Роман выступает консультантом программы: он помогает формировать содержание уроков с опорой на актуальные инженерные практики и жесткие требования индустрии. Узнать больше о программе и разработке автономных систем: 👉 Курс «Разработка ИИ-агентов» Так, продолжаем знакомить вас с командой? 👍 — Да, ждем новых лиц 🔥 — Жду полезные материалы от Романа

⚙️ TypeScript без V8: AOT-компиляция в нативный бинарник В МойОфисе уперлись в санкционные ограничения Qt и медленную разрабо
⚙️ TypeScript без V8: AOT-компиляция в нативный бинарник В МойОфисе уперлись в санкционные ограничения Qt и медленную разработку UI на C++. Решение — компилировать TypeScript в натив напрямую, без браузера и интерпретатора. • Фронтенд компилятора написан на самом TS и крутится в Node.js: переиспользуют парсер и AST от Microsoft • Выход фронтенда — LLVM IR, дальше стандартный бэкенд LLVM и llc. По сути поток компиляции концептуально идентичен Clang • Свой JS-рантайм (TSNative STD): базовые типы ECMAScript, GC, event loop — всё, что обычно даёт V8 • Сопоставление TS-вызовов с C++-символами идёт через .d.ts-декларации и nm: ищут по обычному имени, вставляют в IR mangled Точка входа живёт на стороне C++: она инициализирует рантайм и дёргает единственный экспорт tsmain, в который слинкован весь TS-код как статическая библиотека (extern «C», с оглядкой на ABI) 👉 Статья 👉 Видео 📍Навигация: ВакансииЗадачиСобесы Канал в Max Библиотека C/C++ разработчика #буст

🐸 Подборка вакансий для C++-разработчиков за неделю Системный разработчик С++ — Офис (Москва) Разработчик C++ — Удалёнка Senior C Developer —Удалёнка Разработчик на C/C++ под Linux — от 250 000 и до 350 000 ₽ Удалёнка/Гибрид (Москва) 📍Навигация: ВакансииЗадачиСобесыКанал в Max Библиотека C/C++ разработчика #вакансии

📤 export: что именно вы отдаёте наружу? Из модуля наружу видно только то, что помечено export. Всё остальное снаружи не видно — но это не «закрытость» уровня файла: у непомеченных сущностей модульное связывание, то есть их видят другие единицы трансляции того же модуля, просто не видит код, который подключает модуль. Это противоположность заголовкам, где в чужой код текстуально попадает вообще всё.
export module geometry;

export struct Point { double x, y; };  // открыто наружу

double dist(Point a, Point b);          // скрыто снаружи,
                                        // но доступно внутри модуля

export double length(Point p) {         // открыто наружу
    return dist(p, {0, 0});
}
Открыть наружу можно почти любую сущность: функции, типы, шаблоны, переменные, псевдонимы using. 🪐 Удобные формы записи
export {                    // блок экспорта
    int foo();
    int bar();
}

export namespace net {      // только объявления ЭТОГО блока
    void connect();
}

export import utils;        // повторный экспорт: проброс
                            // чужого модуля дальше
❗️ export namespace открывает только то, что объявлено в этом блоке. Если позже снова открыть пространство имён net без export, новые имена наружу не уйдут. ❌ Ошибки • export допустим только в единице, которая начинается с export module …;. В единице реализации (module geometry; без export) это ошибка компиляции • export нельзя ставить на сущности в безымянном пространстве имён — у них внутреннее связывание • функцию со static не открыть — она по определению локальна (внутреннее связывание) • нельзя открывать что-либо из общей вступительной части модуля (того, что идёт до export module …;) 📍Навигация: ВакансииЗадачиСобесыКанал в Max Библиотека C/C++ разработчика #константная_правильность

Чтобы безопасно использовать выровненные SIMD-загрузки (например, _mm256_load_ps) по SoA-массиву float, массив должен быть выровнен на:
Anonymous voting

🖥️ 86Box 6.0: низкоуровневая эмуляция x86 как она есть Вышел релиз открытого эмулятора 86Box — эмуляция машин от 8086 до Cel
🖥️ 86Box 6.0: низкоуровневая эмуляция x86 как она есть Вышел релиз открытого эмулятора 86Box — эмуляция машин от 8086 до Celeron Mendocino, способная поднять MS-DOS, Windows 3.11/95, OS/2, BeOS и NEXTSTEP. • Реализована симуляция звуков HDD: писк шпинделя и щелчки позиционирования головок — фетиш для тех, кто скучает по железу 90-х • Добавлен виртуальный сетевой коммутатор для связи нескольких экземпляров 86Box между собой • Появился турбо-режим, снимающий искусственное ограничение скорости эмуляции. • Заметно поднята производительность на ARM-хостах, добавлен запуск под ARM64-версии Windows • Расширен список эмулируемых машин (от IBM Multistation 5550 до плат на Slot 1) и звуковых карт ISA/LPT Кодовая база остаётся на чистом C — что для проекта с такой плотностью низкоуровневой работы с железом выбор предсказуемый: прямой контроль над памятью и отсутствие сюрпризов на границе ABI. 👉 Github 📍Навигация: ВакансииЗадачиСобесыКанал в Max Библиотека C/C++ разработчика #свежак