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

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

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

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

РКН: https://gosuslugi.ru/snet/67a5bac324c8ba6dcaa1ad17
Download Telegram
😈 Modules в C++20 - будущее или очередной провал?

Modules обещали революцию, а получили головную боль!


5 лет назад: "Modules решат все проблемы! Быстрая компиляция! Настоящая инкапсуляция!"

2025 год: Поддержка модулей все еще экспериментальная, build системы путаются, а простой hello world на модулях собирается в 3 раза дольше классического 😅


🐊 Реальность модулей:

- CMake = beta поддержка
- Legacy код = не портируется
- Compile times = пока что хуже


😡 Парадокс:

Хотели ускорить компиляцию, получили новые проблемы с build системами.
Но справедливости ради - концепция правильная. Проблема в том, что экосистема не готова. Может через 5 лет будет по-другому?


💡Сравнение:

// Классика: работает везде
#include <iostream>
#include "my_header.h"

// Modules: работает... иногда... если повезет
import std.io;
import my.module;



Вопрос:

Стоит ли уже сейчас изучать modules или подождать еще пару лет?

🔥 Уже использую в пет проектах
⚡️ Изучаю, но не применяю
👾 Жду стабилизации
❤️ Пока что #include рулит

Библиотека C/C++ разработчика #междусабойчик
Please open Telegram to view this post
VIEW IN TELEGRAM
28👾186🔥3
✏️ conjure_enum: легковесное перечисление C++20


🔹 Зачем?

Работа с перечислениями (enum) в C++ часто требует дополнительного кода: преобразование в строку, проверка значений, итерация по всем вариантам. Библиотека conjure_enum автоматизирует эту рутину!


🔹 Что умеет?

Генерация to_string() для enum
Проверка валидности значений (is_valid)
Итерация по всем элементам enum
Поддержка enum и enum class
Минимальный оверхед (всё вычисляется на этапе компиляции)


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

#include "conjure_enum.h"

CONJURE_DEFINE_ENUM(Color, Red, Green, Blue)

int main() {
Color c = Color::Green;
std::cout << conjure_enum::to_string(c); // "Green"
std::cout << conjure_enum::is_valid(42); // false
for (Color value : conjure_enum::values<Color>()) { ... }
}



🔹 Плюсы:

✔️ Заголовочный-only (просто подключи conjure_enum.h)
✔️ Не требует C++20 (работает даже на C++11)
✔️ Лёгкая интеграция в существующий код


💡 Кому пригодится?

— Тем, кто устал писать switch-case для enum-ов
— Если нужна удобная отладка (вывод значений в лог)
— Для валидации конфигов/сетевых данных

🔗 Ссылка

Библиотека C/C++ разработчика #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥91
This media is not supported in your browser
VIEW IN TELEGRAM
Плюсовики, до конференции Яндекса C++ Zero Cost Conf осталось 9 дней!

Мероприятие о прикладном C++ пройдет в Москве, СПб и Белграде. Вас ждут доклады о внедрении C++20 модулей, текущем статусе и перспективах развития hardening и десятки других выступлений от практикующих C++ экспертов.

Если собираетесь посетить конференцию в Москве, то вас также ждет воркшоп по Perforator, кейс-лаб по надежности микросервисов и код-гольф, где нужно решать задачи на C++, потратив на код как можно меньше символов.

Участие бесплатное, но необходимо зарегистрироваться на сайте до 28 июля!
🔥63🤔3👍2
🐕‍🦺 Пет-проекты в резюме: как превратить фриланс и side-проекты в карьерный козырь

Наверняка каждому джуну была знакома эта ситуация: сидишь ночами, пилишь пет-проект, потом еще один... а когда приходит время собирать резюме, понимаешь — показать нечего. Вернее, проекты-то есть, но непонятно, как их оформить и включить в резюме.

Поэтому сегодня объясним, как оформить свой неформальный опыт в резюме и продать себя в качестве специалиста.

👉 Статья

Библиотека C/C++ разработчика
11
🤔 «Начни сразу с нейросетей — зачем тебе логрегрессия?»

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

Классика ML — это не допотопная теория, а база (bias/variance, деревья, метрики), без которой не понять Deep Learning.

⚡️ Хотите освоить этот фундамент на реальных задачах? Приходите на наш курс по классическому ML. Только хардкор, только продовые задачи!

📆 Старт — 12 августа.

Для первых 10 участников бонус — специальный лонгрид по теме курса, чтобы вы могли начать разбираться уже сейчас.

🎁 Последний день промокода Earlybird на скидку 10.000₽.

👉 Не упустите шанс!
Какое изначальное название носил язык C++?
Anonymous Quiz
4%
Enhanced C
17%
Object C
67%
C with Classes
12%
Advanced C
📰 Свеженькое из мира C++

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

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

C++26 улучшает форматирование чисел — статья о предстоящем изменении в std::format
Эволюция работы с типами в C++: от C++98 до C++23 — историческая справка по работе с типами

😎 Полезное:

std::chrono — библеотека для работы cо временем
Обработка ошибок с помощью AI — промпт, который поможет улучшить обработку ошибок

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

conjure_enum — библиотека для удобной работы и с перечислениями

Библиотека C/C++ разработчика
🏖️ Подборка вакансий для C++-разработчиков за неделю

Software Engineer (Humanoid Robots) — 190 000 ₽ Удалёнка

Senior Linux Distro Master — от 5 000 и до 5 500 $ Удалёнка

C++ Разработчик — от 180 000 и до 250 000 ₽ Удалёнка

C++ Developer Middle — 200 000₽ Удалёнка

Разработчик C/C++ (SDN dataplane, DPDK/DOCA API) — от 250 000 и до 400 000 ₽ Удалёнка

Разработчик C++ — от 250 000 и до 400 000 ₽ Удалёнка

Библиотека C/C++ разработчика
🙏3👍1
Forwarded from Библиотека программиста | программирование, кодинг, разработка
Вот оно, безопасное программирование на С++ во всей красе

🐸 Библиотека программиста
Please open Telegram to view this post
VIEW IN TELEGRAM
😁271👍1👏1🥱1
Последний шанс залутать курсы Proglib Academy с выгодой 40% и пожизненным доступом.

До 1 августа действует скидка на курсы по математике для Data Science, алгоритмам и структурам данных, обновлённому Python, frontend-разработке с нуля, основам IT для непрограммистов, базовым моделям ML, а также архитектурам и шаблонам проектирования.

Выбираем и забираем 👈

P.S. Акция не распространяется на курсы «AI-агенты для DS-специалистов» и «ML для старта в Data Science».
🥱21😁1
🏠 How to: Как правильно реализовать оператор присваивания

Перегрузка operator= - одна из самых коварных тем в C++. Часто приводит к багам.


🍴Правила безопасного operator=:

1️⃣ Проверяем самоприсваивание
2️⃣ Создаём временную копию
3️⃣ Используем swap idiom


class MyString {
private:
char* data;
size_t length;

public:
// Правильный operator=
MyString& operator=(const MyString& other) {
if (this == &other) return *this; // самоприсваивание

// Создаём временную копию
char* temp = new char[other.length + 1];
strcpy(temp, other.data);

// Освобождаем старые данные
delete[] data;

// Присваиваем новые
data = temp;
length = other.length;

return *this;
}

// Лучше через copy-and-swap
MyString& operator=(MyString other) { // копия по значению
swap(*this, other);
return *this;
}
};


Опасность:

Без проверки самоприсваивания можем удалить данные, которые копируем.

Золотое правило:

Copy-and-swap никогда не подведёт.

Библиотека C/C++ разработчика #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
2🥰1
Чек-лист: Оптимизация времени компиляции

Долгая компиляция убивает продуктивность. Ускорьте сборку вашего C++ проекта.


🎯 Структура проекта

✓ Используйте forward declarations вместо #include где возможно
✓ Минимизируйте зависимости в header файлах
✓ Применяйте Pimpl idiom для скрытия деталей имплементации
✓ Разбивайте большие файлы на модули


🎯 Современные возможности

✓ Переходите на C++20 modules постепенно
✓ Используйте precompiled headers для стабильных зависимостей
✓ Настройте distributed compilation (distcc, Incredibuild)


🎯 Инструменты и настройки

✓ Включите параллельную компиляцию (-j флаг)
✓ Используйте ccache для кеширования результатов
✓ Профилируйте время компиляции с -ftime-trace (Clang)
✓ Настройте incremental linking


Как измерить результат: Замеряйте время полной и инкрементальной сборки регулярно.

Библиотека C/C++ разработчика #буст
6🔥4
🚀 C++17: structured bindings

Structured bindings в C++17 — это не просто красивый синтаксис, это читаемость кода на новом уровне!


// Старый способ (до C++17)
std::map<std::string, int> counts;
for (auto it = counts.begin(); it != counts.end(); ++it) {
std::cout << it->first << ": " << it->second << std::endl;
}

// C++17 structured bindings
for (const auto& [key, value] : counts) {
std::cout << key << ": " << value << std::endl;
}

// Работает с парами, tuple, массивами
auto [x, y, z] = std::make_tuple(1, 2.5f, "hello");
auto [min, max] = std::minmax({5, 2, 8, 1, 9});



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


🧠 Используете ли вы structured bindings? В каких случаях они наиболее полезны?

Библиотека C/C++ разработчика #междусобойчик
👍10🔥8