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

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

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

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

РКН: https://gosuslugi.ru/snet/67a5bac324c8ba6dcaa1ad17
Download Telegram
📰 Свеженькое из мира C++

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

😎 Полезное:

Как правильно реализовать оператор присваивания — реализация своего оператора присваивания
Оптимизация времени компиляции — чек-лист по улучшению времени компиляции кода
Как внедрять современные проверки С++ — видео о подходах к внедрению инструментов безопасности

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

NanaZip — архиватор файлов с открытым исходным кодом (написан на основе исходного кода исходного кода 7-Zip)
RocksDB — постоянное хранилище ключей и значений для флэш-памяти и оперативной памяти
Atmosphère — кастомизированная прошивка для Nintendo Switch

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

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

Team Lead C++ (Social Core) — от 300 000 ₽ Удалёнка

Senior C++ Developer — от 380 000 и до 430 000 ₽ Удалёнка

Senior Embedded-разработчик / программист микроконтроллеров — от 300 000 ₽ Офис (Москва)

C++-разработчик (Новости) — от 270 000 и до 370 000 ₽ Удалёнка

Библиотека C/C++ разработчика
🍙 How-to: Как избежать memory ordering проблем в многопоточном коде


💭 Race conditions в атомарных операциях - одна из самых коварных проблем. Разбираемся с memory ordering.


✏️ Пошаговое решение:

Проблема: Неопределенное поведение при concurrent доступе

//  ОПАСНО: data race!
std::atomic<bool> ready{false};
int data = 0;

// Thread 1
data = 42;
ready.store(true); // неопределенный ordering!

// Thread 2
if (ready.load()) {
process(data); // может быть 0 или 42!
}



Решение: Explicit memory ordering

//  ПРАВИЛЬНО: используем memory_order
std::atomic<bool> ready{false};
int data = 0;

// Thread 1
data = 42;
ready.store(true, std::memory_order_release); // освобождаем

// Thread 2
if (ready.load(std::memory_order_acquire)) { // захватываем
process(data); // гарантированно 42!
}


⚠️ Частые ошибки:

• Использование memory_order_relaxed везде
• Забывание про acquire-release семантику
• Смешивание атомарных и неатомарных операций

Библиотека C/C++ разработчика #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔4👍2
🤔 Зачем вообще понимать, как работает ML?

Сейчас многие просто запускают модельку в sklearn — и радуются точности 0.92.

Вроде всё работает… но почему?
А когда сломается — что делать?


Машинное обучение — это система, которую можно понять.

Если знаешь, что делает градиентный спуск, зачем нужен бустинг и как дерево принимает решения — ты не просто «запускаешь», ты управляешь моделью.

👉 Мы сделали курс, чтобы в это было реально въехать:

— без сложных формул;
— с интуитивными объяснениями;
— от простого к сложному.

Если хочешь перейти от «гуглю код» к «понимаю, как это работает» — ты по адресу!

Стартуем в сентябре — бронируй место на курсе уже сейчас
2🥱2😁1
👾 Clang получает режим усиленной безопасности

Разработчики Clang обсуждают добавление флага -fhardened по аналогии с GCC 14.

🏖️ Новый режим одной командой активирует целый набор защитных механизмов:

• Инициализация переменных нулями
• Защита стека и от переполнений
• Рандомизация адресов
• Усиленные проверки библиотек
• Дополнительные предупреждения

Проблема: разрозненность опций безопасности в C/C++. Многие разработчики просто не знают о их существовании или забывают включать.

Решение: единый флаг, который «из коробки» делает код безопаснее.
Конечно, это костыли для языков 70-80х годов, но лучше поздно чем никогда.

👉 Заметка

Библиотека C/C++ разработчика #буст
💡 Фича дня: std::exchange (C++14)

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

std::exchange атомарно заменяет значение переменной и возвращает старое значение — всё в одной строке.


До:

T old_value = obj;
obj = new_value;
return old_value;


После:

return std::exchange(obj, new_value);


Код становится более читаемым, безопасным и выразительным. Особенно полезно в RAII-классах и при работе с умными указателями.

Библиотека C/C++ разработчика #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13