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

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

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

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

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

#WXSSA
Download Telegram
🔧 std::enable_if_t для проверки иерархии классов

Нужно убедиться, что класс является наследником другого? Проверяйте это на этапе компиляции с помощью type traits.

#include <type_traits>
#include <memory>

class Base {
public:
virtual ~Base() = default;
};

class Derived : public Base {};
class Unrelated {};

// Фабрика, работающая только с наследниками Base
template<typename T>
std::enable_if_t<std::is_base_of_v<Base, T> && !std::is_same_v<Base, T>,
std::unique_ptr<T>>
createObject() {
return std::make_unique<T>();
}

int main() {
auto obj1 = createObject<Derived>(); // OK
// auto obj2 = createObject<Unrelated>(); // Compile error
// auto obj3 = createObject<Base>(); // Compile error
}


Контроль иерархии классов на этапе компиляции
💰 Предотвращение неправильного использования API
⚡️Статическая проверка без runtime-затрат

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

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

#междусобойчик
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10
-Wdouble-promotion -Wfloat-equal — float ловушки

Floating-point арифметика полна сюрпризов. Два специализированных флага помогают найти неявные расширения float до double и опасные сравнения на равенство.

🏝 -Wdouble-promotion

float compute(float x) {
return x * 3.14; // Внимание! 3.14 — это double!
// x неявно расширяется до double
}

// С -Wdouble-promotion:
// warning: implicit conversion increases floating-point precision

// Исправление:
return x * 3.14f; // f-суффикс — явный float


☀️ -Wfloat-equal

double a = 0.1 + 0.2;
if (a == 0.3) { // Почти никогда не выполнится!
// 0.1 + 0.2 = 0.30000000000000004 в IEEE 754
}

// -Wfloat-equal: warning: comparing floating point with ==

// Правильно:
constexpr double EPS = 1e-9;
if (std::abs(a - 0.3) < EPS) { /* ... */ }


❗️ Для MSVC нету точного аналога, но похожего эффекта можно добиться с помощью /W4.


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

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

#константная_правильность
Please open Telegram to view this post
VIEW IN TELEGRAM
4👍4
🫖 Измеряем время затрачиваемое блокировками
Автор статьи взял и замерил: mutex, futex, горячий atomic-спинлок — что сколько реально стоит в тактах, и когда какой примитив выбрать.

Ключевые моменты статьи:

std::mutex — стабильные ~25 накладных тактов, но 40 байт памяти на объект
futex через std::atomic wait/notify — ~14 тактов в удачном случае, но осторожно с contention
• горячий спинлок — 2–4 такта накладных, однако может съесть всё ядро и заморозить владельца лока

Основной фокус — бенчмарк на реальных данных: пул 128 МБ мелких защищённых объектов, два конкурирующих потока, измерение влияния cache-line соседства и contention.

Спойлер из выводов: unique_ptr<mutex> — неплохой безопасный дефолт, с которого не стыдно начать. А futex стоит рассматривать только если память давит и вы точно замерили свой contention — иначе легко получить проигрыш там, где ждали выигрыш.

👉 Статья

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

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

#линкер_рекомендует
3👍1😁1
Оптимизация и контроль: инженерный курс по AI-агентам

Пока другие пишут промпты, мы говорим об управлении ресурсами. Обновлённый курс «Разработка AI-агентов» — это про жёсткий инжиниринг, метрики и контроль выполнения.

Hardcore features:

🔹 Управление ресурсами. Оптимизация токенов, кэширование, роутинг запросов и контроль вычислительных затрат.

🔹 Архитектура. Построение отказоустойчивых графов (`LangGraph`), time-travel отладка и восстановление состояний.

🔹 Advanced RAG. Эффективные алгоритмы поиска и извлечения данных из сложных источников.

🔹 Prod-ready. Трассировка, логирование и метрики производительности системы.

Стартуй сейчас!
Материалы доступны сразу.

🎟 Промокод Agent — скидка 10 000 ₽ (до 28 февраля).

👉 Инженерный трек в AI
3😁1😢1
😎 Топ-вакансий для C++ разработчиков за неделю

Embedded engineer — от 330 000 и до 370 000 ₽ Офис(Москва)

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

C++ Developer (Middle/Senior) — от 2 000 и до 4 000 $ Удалёнка

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

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

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

#буст
2😁2
🔧Код-ревью от команды от Edge

Команда браузера Edge разобрала сотни pull request'ов и собрала главные грабли, на которые наступают все.

Ключевые моменты лекции:

▶️ Передаёшь std::string по значению? Используй std::string_view — без лишних аллокаций
▶️ std::vector в параметрах? std::span справится без временных объектов
▶️ Пишешь return std::move(x)? Ты только что убил NRVO — компилятор умнее
▶️ std::variant вместо нескольких std::optional — код станет безопаснее и чище
▶️ emplace_back вместо push_back, contains вместо find — пора на современный STL
▶️ clang-tidy выловит всё вышеперечисленное автоматически — просто включи нужные проверки

📹 Лекция

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

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

#свежак
😁61
Forwarded from Библиотека программиста | программирование, кодинг, разработка
👩‍💻 Женщины в IT зарабатывают на 40% меньше мужчин — но дело не в дискриминации

Женщины в IT получают 99 тысяч рублей, мужчины — 156 тысяч. Разрыв в 40% выглядит пугающе, но объяснение не такое однозначное, как кажется.

Исследуем полный путь карьеры в IT через призму гендера — от выбора вуза до позиции CTO — и показываем, где заканчивается статистика и начинается реальное неравенство.

🐸 Библиотека программиста
Please open Telegram to view this post
VIEW IN TELEGRAM
😁7
Даже ИИ-агентам нужен жёсткий контроль ресурсов

Собрать Proof of Concept с вызовом LLM API легко. Заставить эту систему работать предсказуемо, без утечек контекста, бесконечных циклов и перерасхода вычислительных мощностей — задача для инженеров.

Мы пересобрали курс по AI-агентам под реалии 2026 года. Фокус смещён с обзора фич на суровый инжиниринг: тестирование, метрики производительности и управление затратами.

Что ждёт на глубоком техническом уровне:

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

Используйте промокод Agent до 28 февраля — это скидка 10 000 рублей на обучение.

Сейчас активна акция «3 курса по цене 1» (ещё два курса в подарок).

Начать инженерную разработку AI
1😁1
🐛 Баг на выходные: порядок ASSERT vs EXPECT

Кажется, разница между ASSERT_* и EXPECT_* — мелочь. Но она меняет поведение теста кардинально.

TEST(VectorTest, CheckElements) {
std::vector<int> v = {1, 2, 3};

ASSERT_EQ(v.size(), 4u); // (1)
EXPECT_EQ(v[0], 1); // (2)
EXPECT_EQ(v[3], 4); // (3)
}


Что произойдёт при выполнении теста? Какие строки выполнятся, а какие нет? Когда использование ASSERT_EQ вместо EXPECT_EQ — правильное решение, а когда — опасное?

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

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

#междусобойчик
😁1👾1
📰 Свеженькое из мира C++

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

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

std::enable_if_t — зазбираем способ для проверки иерархии классов
-Wdouble-promotion -Wfloat-equal — флаги помогающие найти неявные расширения float до double
Измеряем время затрачиваемое блокировками — статья о том как дорого стоят блокировки
Код-ревью от команды от Edge — разбор pull request'ов от команды Edge и описание основных проблем в коде

👺 Софт:

zvec — легковесная база данных in-process, предназначенная для встраивания в приложения
OrcaSlicer — бесплатный слайсер для 3D-печати на базе Bambu Studio
ESP32-Bus-Pirate — прошивка для ESP32, превращающая устройство в многофункциональный инструмент хакера с поддержкой протоколов (I2C, SPI, UART и др.)
Geode — современный загрузчик модов и SDK для моддинга Geometry Dash

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

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

#свежак
👍3
⚙️ Низкоуровневый контроль над высокоуровневыми агентами: запуск в Production

Когда речь заходит об AI-агентах в 2026 году, на первый план выходят вопросы оптимизации ресурсов, изоляции доменов и стабильности функционирования. Наш курс переработан для тех, кто ценит управляемый инжиниринг и детальное управление системой.

📚 В обновлённой программе:

— управление ресурсами: токены, кэширование и оптимизация вычислительных затрат;
— инжиниринг качества: глубокое логирование, трассировка и устранение регрессий;
LangGraph PRO: механизмы восстановления состояний и time-travel диагностика;
— промышленный RAG: продвинутые методы извлечения данных из сложных источников.

Подготовьтесь к обучению заранее — материалы для старта доступны сразу после покупки.

Специальные условия до 28 февраля:

— введите промокод Agent для получения скидки 10 000 рублей**;
— участвуйте в **акции «3 курса по цене 1» — выберите два дополнительных курса.

👉 Получить доступ к курсу и подаркам
😁2
🤠 Что такое std::is_within_lifetime из C++26?

В статье автор разбирает новинку C++26 — std::is_within_lifetime — и объясняет, зачем она вообще появилась в стандарте.

❗️Ключевые моменты статьи:
is_within_lifetime — не union-специфичная функция, а общий механизм запроса времени жизни объекта
• мотивация пришла из задачи реализации OptBool с минимальным расходом памяти
• решение элегантно совмещает compile-time корректность и runtime эффективность

Фокус статьи — на дизайне фичи: почему указатель вместо ссылки, почему consteval-only и почему такое обобщённое имя.

👉 Статья

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

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

#свежак
🤩2👍1😁1
🍙 Комментарии убивают код. Вы согласны?

Роберт Мартин в "Чистом коде" написал жёстко: комментарий — это признак неудачи. Если вам нужно объяснять код словами, значит, вы написали его недостаточно ясно.

В C++ эта идея получила новое дыхание с приходом [[nodiscard]], концептов из C++20 и строгой типизации. Тип std::expected<Result, Error> уже сообщает о возможной ошибке без единого слова.

Но у этой философии есть тёмная сторона. Когда через год вы видите static constexpr int MAGIC = 0x5F3759DF — никакое именование не объяснит, что это константа из алгоритма быстрого обратного квадратного корня Quake III. Здесь нужен комментарий и, желательно, ссылка на статью.

Самодокументирующийся код работает для структуры. Комментарии работают для контекста и истории.

✏️ Вы придерживаетесь правила "код без комментариев" или считаете это крайностью?

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

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

#междусобойчик
Please open Telegram to view this post
VIEW IN TELEGRAM
3😁2