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

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

رفتن به کانال در Telegram

Полезные материалы по всему, что может быть полезно плюсовику/сишнику. По всем вопросам @evgenycarter

نمایش بیشتر
7 221
مشترکین
-524 ساعت
-217 روز
-4430 روز
آرشیو پست ها
RAII 2.0: RAII как архитектурный инструмент в C++ Идиома RAII — давно зарекомендовал себя как удобный способ автоматического
RAII 2.0: RAII как архитектурный инструмент в C++ Идиома RAII — давно зарекомендовал себя как удобный способ автоматического управления ресурсами в C++. Обычно мы применяем его для управления памятью, файловыми дескрипторами или мьютексами. Однако что, если расширить понятие RAII до управления не только физическими ресурсами, но и логическими контрактами и состояниями системы? В этой статье я хочу поговорить о том, как RAII можно использовать для контроля жизненного цикла асинхронных операций, транзакций или подписок, гарантируя их корректное завершение или откат до прежнего состояния. https://habr.com/ru/articles/901092/ #cpp #programming 👉 @cpp_lib

Удобный способ работы с перечислениями в C++ — приведение enum к строке и обратно. Во многих проектах используется enum, чтобы задать ограниченный набор значений. Но как вывести значение enum в лог? Или, наоборот, прочитать из строки и получить нужное значение enum? C++ сам по себе не умеет конвертировать enum в строку и обратно. Вот простая реализация этого функционала через std::unordered_map:

enum class LogLevel {
    Debug,
    Info,
    Warning,
    Error
};

const std::unordered_map<LogLevel, std::string> LogLevelToString = {
    {LogLevel::Debug, "Debug"},
    {LogLevel::Info, "Info"},
    {LogLevel::Warning, "Warning"},
    {LogLevel::Error, "Error"},
};

const std::unordered_map<std::string, LogLevel> StringToLogLevel = {
    {"Debug", LogLevel::Debug},
    {"Info", LogLevel::Info},
    {"Warning", LogLevel::Warning},
    {"Error", LogLevel::Error},
};

std::string to_string(LogLevel level) {
    return LogLevelToString.at(level);
}

LogLevel to_log_level(const std::string& str) {
    return StringToLogLevel.at(str);
}
Такой подход хорошо работает, если enum не слишком большой. Если значений много — можно автоматизировать генерацию через макросы или использовать библиотеки вроде magic_enum. #cpp #programming 👉 @cpp_lib

Лаконичный макрос defer для C++17 Ручное управление ресурсами в низкоуровневом си-подобном коде на C++ — довольно хлопотное з
Лаконичный макрос defer для C++17 Ручное управление ресурсами в низкоуровневом си-подобном коде на C++ — довольно хлопотное занятие. Создание достойных RAII-врапперов для каждого используемого сишного API не всегда практично, а использование подходов с goto cleanup или множеством вложенных if (success) вредит читаемости кода. Макрос defer как никогда кстати! Отложенная лямбда будет выполнена при выходе из области видимости, независимо от того, будет ли выполнен return, брошено исключение, или даже выполнен goto наружу. Данный макрос по-настоящему zero-cost и не зависит от рантайма C или стандартной библиотеки, поэтому его можно использовать даже в разработке под ядро ОС. https://habr.com/ru/articles/916732/ #cpp #programming 👉 @cpp_lib

Низкоуровневый скриптинг на C++ для игровых движков Я постарался охватить только основы, но текст всё равно получился очень длинным. libriscv — это зрелый эмулятор RISC-V, который в настоящее время используется в игровых движках. Насколько мне известно, это единственный эмулятор, в котором основной акцент делается на обработке задержек, а также предоставляются специализированные решения и инструменты для выполнения быстрых вызовов при обращении с функциями — как входящих, так и исходящих. Причём, всё это заключено в безопасной песочнице. Задержки, наблюдаемые в libriscv, гораздо ниже, чем в эталонных эмуляторах. Меня многие спрашивали, как им пользоваться, но здесь интереснее то, как вообще может прийти в голову мысль писать скрипты на C++ — не слишком ли сложно это будет? Оказывается, нет, не очень. Вот уже несколько лет я пишу на C++ скрипты для одной большой и одной не очень большой игры, и меня почти не посещало ощущение, что виной каким-то возникающим при этом проблемам являются язык C++ или связанные с ним скриптовые API. Я много лет программирую на Lua, а до этого пользовался обычным C. Но сейчас современный идиоматический C++ — то, что мне нужно. Причём, я могу писать на этом языке как в самом игровом движке, так и за его пределами, при этом опираясь (буквально) на одни и те же абстракции и оперируя одинаковыми структурами данных. Наконец, C++ просто очень мощный. Правда, я признаю, что о вкусах не спорят, и при работе с C++ также не обойтись без компромиссов. https://habr.com/ru/articles/919620/ #cpp #programming 👉 @cpp_lib

🚀 Подборка Telegram каналов для программистов Системное администрирование, DevOps 📌 https://t.me/bash_srv Bash Советы https://t.me/win_sysadmin Системный Администратор Windows https://t.me/sysadmin_girl Девочка Сисадмин https://t.me/srv_admin_linux Админские угодья https://t.me/linux_srv Типичный Сисадмин https://t.me/devopslib Библиотека девопса | DevOps, SRE, Sysadmin https://t.me/linux_odmin Linux: Системный администратор https://t.me/devops_star DevOps Star (Звезда Девопса) https://t.me/i_linux Системный администратор https://t.me/linuxchmod Linux https://t.me/sys_adminos Системный Администратор https://t.me/tipsysdmin Типичный Сисадмин (фото железа, было/стало) https://t.me/sysadminof Книги для админов, полезные материалы https://t.me/i_odmin Все для системного администратора https://t.me/i_odmin_book Библиотека Системного Администратора https://t.me/i_odmin_chat Чат системных администраторов https://t.me/i_DevOps DevOps: Пишем о Docker, Kubernetes и др. https://t.me/sysadminoff Новости Линукс Linux 1C разработка 📌 https://t.me/odin1C_rus Cтатьи, курсы, советы, шаблоны кода 1С https://t.me/DevLab1C 1С:Предприятие 8 https://t.me/razrab_1C 1C Разработчик https://t.me/buh1C_prog 1C Программист | Бухгалтерия и Учёт https://t.me/rabota1C_rus Вакансии для программистов 1С Программирование C++📌 https://t.me/cpp_lib Библиотека C/C++ разработчика https://t.me/cpp_knigi Книги для программистов C/C++ https://t.me/cpp_geek Учим C/C++ на примерах Программирование Python 📌 https://t.me/pythonofff Python академия. https://t.me/BookPython Библиотека Python разработчика https://t.me/python_real Python подборки на русском и английском https://t.me/python_360 Книги по Python Java разработка 📌 https://t.me/BookJava Библиотека Java разработчика https://t.me/java_360 Книги по Java Rus https://t.me/java_geek Учим Java на примерах GitHub Сообщество 📌 https://t.me/Githublib Интересное из GitHub Базы данных (Data Base) 📌 https://t.me/database_info Все про базы данных Мобильная разработка: iOS, Android 📌 https://t.me/developer_mobila Мобильная разработка https://t.me/kotlin_lib Подборки полезного материала по Kotlin Фронтенд разработка 📌 https://t.me/frontend_1 Подборки для frontend разработчиков https://t.me/frontend_sovet Frontend советы, примеры и практика! https://t.me/React_lib Подборки по React js и все что с ним связано Разработка игр 📌 https://t.me/game_devv Все о разработке игр Библиотеки 📌 https://t.me/book_for_dev Книги для программистов Rus https://t.me/programmist_of Книги по программированию https://t.me/proglb Библиотека программиста https://t.me/bfbook Книги для программистов БигДата, машинное обучение 📌 https://t.me/bigdata_1 Big Data, Machine Learning Программирование 📌 https://t.me/bookflow Лекции, видеоуроки, доклады с IT конференций https://t.me/rust_lib Полезный контент по программированию на Rust https://t.me/golang_lib Библиотека Go (Golang) разработчика https://t.me/itmozg Программисты, дизайнеры, новости из мира IT https://t.me/php_lib Библиотека PHP программиста 👨🏼‍💻👩‍💻 https://t.me/nodejs_lib Подборки по Node js и все что с ним связано https://t.me/ruby_lib Библиотека Ruby программиста https://t.me/lifeproger Жизнь программиста. Авторский канал. QA, тестирование 📌 https://t.me/testlab_qa Библиотека тестировщика Шутки программистов 📌 https://t.me/itumor Шутки программистов Защита, взлом, безопасность 📌 https://t.me/thehaking Канал о кибербезопасности https://t.me/xakep_2 Хакер Free Книги, статьи для дизайнеров 📌 https://t.me/ux_web Статьи, книги для дизайнеров Математика 📌 https://t.me/Pomatematike Канал по математике https://t.me/phis_mat Обучающие видео, книги по Физике и Математике https://t.me/matgeoru Математика | Геометрия | Логика Excel лайфхак📌 https://t.me/Excel_lifehack https://t.me/mir_teh Мир технологий (Technology World) Вакансии 📌 https://t.me/sysadmin_rabota Системный Администратор https://t.me/progjob Вакансии в IT

Пишем игру для игровой ретро-консоли Anbernic на C++ Дисклеймер Сразу скажу, что почти всё, что описано в этой статье, я дела
Пишем игру для игровой ретро-консоли Anbernic на C++ Дисклеймер Сразу скажу, что почти всё, что описано в этой статье, я делал первый раз в жизни, поэтому я не мог не совершить ошибок. Некоторые мои решения и заявления могут быть некорректными. Воспринимать эту статью как туториал можно только на свой страх и риск. Для нормального восприятия этой статьи вы должны обладать базовыми навыками программирования на C++ и хотя бы общим представлением о том, что из себя представляет операционная система Linux. Как всё начиналось Не так давно ко мне в руки попала игровая консоль Anbernic RG35XX SP. Это портативная игровая консоль на базе четырёхъядерного процессора Allwinner H700 с ядрами Cortex-A53, которая имеет на борту операционную систему OFW (дистрибутив Linux, основанный на Ubuntu). Консоль предназначена для запуска ретро игр на эмуляторе Retroarch. Этот эмулятор поддерживает эмуляцию множества популярных игровых консолей 90х и 2000х и позволяет запускать ТЫСЯЧИ популярных игр, которые можно устанавливать на SD карточку. https://habr.com/ru/articles/897338/ #cpp #programming 👉 @cpp_lib

Как заставить шаблоны компилироваться быстро и выглядеть опрятно Павел Сухов Каждый раз при наборе ключевого слова template у меня за плечом магическим образом появляется какой-то коллега и задает стандартные вопросы: — Это же будет долго компилироваться? — Это же будет нечитабельно, мы не сможем это поддерживать? — Там же будут отвратительные ошибки компиляции, которые мы разберем только консилиумом буддийских монахов? И все эти вопросы повторяются раз за разом. Компилируется долго не все, а то, что компилируется долго, — зачастую можно ускорить. Писать шаблоны можно по-разному, кое-что можно написать красиво, емко и наглядно. Да и ошибки можно причесать новыми инструментами современного С++. В докладе — некоторые идеи по поводу медленных и сложных шаблонов, идеи по их ускорению, и развенчание некоторых мифов. источник #cpp #programming 👉 @cpp_lib

📚 Продвинутые методы архивации: LZ77/78 Приглашаем на открытый урок. 🗓 25 июня в 20:00 МСК 🆓 Бесплатно. Урок в рамках стар
📚 Продвинутые методы архивации: LZ77/78 Приглашаем на открытый урок. 🗓 25 июня в 20:00 МСК 🆓 Бесплатно. Урок в рамках старта курса «Алгоритмы и структуры данных». ✔️ На этом вебинаре мы завершим создание архиватора, добавив алгоритм LZ77/78. Разберем принцип словарного сжатия, механизм поиска повторяющихся последовательностей и формат их кодирования. ✔️ Имплементируем выбранный алгоритм и проведем финальное сравнение всех трех методов сжатия (RLE, Huffman, LZ77/78). Определим, какие алгоритмы лучше работают для различных типов файлов и почему. Завершающее практическое занятие для тех, кто хочет освоить продвинутые алгоритмы и увидеть их применение в реальном проекте.​​​​​​​​​​​​​​​​ 🎁 Всем участникам вебинара дарим промокод, который дает скидку на обучение - Algo5 👉 Регистрация на вебинар: https://vk.cc/cMXv29 Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576

Улучшите читаемость и надежность кода на C++: узнайте основы эффективного рефакторинга ⏺️ На открытом уроке вы научитесь двум
Улучшите читаемость и надежность кода на C++: узнайте основы эффективного рефакторинга ⏺️ На открытом уроке вы научитесь двум мощным приемам дизайна ПО: декомпозиции и абстрагированию. ▸ Мы покажем, как с их помощью улучшить производительность, сохраняя при этом ключевой принцип C++: zero overhead. ▸ Вместе с вами выполним рефакторинг небольшого приложения и повысим его читаемость и тестируемость. ❗️ В результате вы получите практические навыки, которые сможете сразу применить в своей работе. Это поможет вам улучшить кодовую базу проекта и сделать его более надежным и удобным для разработки. Посетите открытый урок в преддверие старта курса «C++ Developer» и получите скидку на обучение! 🔴 Встречаемся 19 июня в 20:00 МСК. Регистрируйтесь прямо сейчас, чтобы не пропустить: https://vk.cc/cMTUi6 Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru

Руководство по сборке Qt под Windows из исходников с MinGW Официальный способ установки готовых бинарников Qt - через онлайн
Руководство по сборке Qt под Windows из исходников с MinGW Официальный способ установки готовых бинарников Qt - через онлайн инсталлятор. Однако он требует обязательной регистрации. Да еще и недоступен на территории РФ. Есть и другие способы получить бинарники, или собрать с компилятором от Microsoft, однако не всегда эти способы приемлемы. Сборка из исходников под Windows может оказаться несколько нетривиальна для новичков, потому сделал небольшую инструкцию по сборке Qt 5 и Qt 6. А так же рассмотрена базовая настройка QT Creator. https://habr.com/ru/articles/917252/ #cpp #programming 👉 @cpp_lib

Отсутствие динамической аллокации в embedded мире Когда мы разрабатываем под embedded, нам приходится сталкиваться с такими ф
Отсутствие динамической аллокации в embedded мире Когда мы разрабатываем под embedded, нам приходится сталкиваться с такими флагами компиляции как -nostdlib -fno-exceptions -fno-rtti. Во многих средах нет malloc/free (new/delete) и вообще нет встроенного выделения памяти. Использование «больших» стандартных контейнеров C++ (например, std::vector) нередко исключено В результате приходится решать задачу «ручного» управления памятью. https://habr.com/ru/articles/918122/ #cpp #programming 👉 @cpp_lib

Ищем Middle C++/ QML разработчик в команду Android 2ГИС Твоя зона ответственности — всё, что пользователь видит и трогает в п
Ищем Middle C++/ QML разработчик в команду Android 2ГИС Твоя зона ответственности — всё, что пользователь видит и трогает в приложении 2ГИС на Android.UI, взаимодействие с core-SDK, логика поверх API — если это на экране, значит это мы. Что делаем: — UI и механика Android-приложения — интеграция с Java/Kotlin и нативными SDK — бизнес-логика на C++ поверх core— проектирование архитектуры— фиксим, оптимизируем, покрываем тестами Команда: 20 разработчиков 3-недельные спринтывнутренние метапы, хакатоны, пятничные онлайн-чаепитияи, конечно, забота о 20+ млн пользователей Наш стек: C++20 • Qt • QML • Java/Kotlin (интеграции)Многопоточность, UI, архитектура, автотесты — всё как ты любишь. Что важно: — 3+ года на C++ — Опыт с QML - обязательно от 2-х лет — уверенность в многопоточке — умение оценивать и декомпозировать задачи — готовность к кросс-функциональному взаимодействию Условия: Удалёнка или офис (на выбор) ДМС, телемедицина, тимтусы, поездки в горы, 2FEST, митапы, хакатоны, всё по классике Хочешь делать интерфейс, которым пользуются миллионы каждый день? 👉 Откликайся

Чтение-копирование-обновление (RCU) Чтение-копирование-обновление эффективно в многопоточных средах, где структура данных поч
Чтение-копирование-обновление (RCU) Чтение-копирование-обновление эффективно в многопоточных средах, где структура данных почти исключительно читается, но редко записывается. https://www.modernescpp.com/index.php/read-copy-update-rcu/ #cpp #programming 👉 @cpp_lib

Электронная картина с автонастройкой яркости на C++/Qt Всю свою жизнь я обходил самоделки. Не привлекало, да и на непосредств
Электронная картина с автонастройкой яркости на C++/Qt Всю свою жизнь я обходил самоделки. Не привлекало, да и на непосредственной работе вполне хватало сложных программистских и инженерных задач. Но любовь к сыну сподвигла взяться за один DIY-проект. Дело в том, что я давно люблю и ценю изобразительное искусство. И также люблю изучение истории (и вообще считаю, что не программированием единым должен жить человек). И я подумал, что изучение истории и живописи можно слить в единый флакон – будет и не скучно, и полезно. Особенно полезно подрастающему школьному и дошкольному поколению. Я захотел электронную картину – чтобы выглядела как картина, а изображения бы настраивались мной, автоматически сменяясь по таймеру. Каждый день – новая картина. Каждый день – повод обсудить с сыном, как видели этот мир художники 200, 300, 500 лет назад, и вообще, а что это за разновидность палаша, аркебузы или фрегата запечатлел здесь художник. А здесь какое важное для мировой истории событие показано? https://habr.com/ru/articles/895768/ #cpp #programming 👉 @cpp_lib

Что значит инициализировать int в C++? Недавно я получил по почте от Сэма Джонсона этот вопрос. Вот слегка отредактированное
Что значит инициализировать int в C++? Недавно я получил по почте от Сэма Джонсона этот вопрос. Вот слегка отредактированное письмо Сэма: «Возьмём для примера этот код в локальной области видимости функции:

int a;
a = 5;
Многие люди считают, что инициализация происходит в строке 1, потому что веб-сайты наподобие cppreference дают такое определение: "Инициализация переменной предоставляет его начальное значение на момент создания". Однако я убеждён, что инициализация происходит в строке 2, потому что [в разных хороших книгах по C++] инициализация определяется как первое существенное значение, попадающее в переменную. Можете ли вы сказать, какая строка считается инициализацией?» https://herbsutter.com/2024/08/07/reader-qa-what-does-it-mean-to-initialize-an-int/ #cpp #programming 👉 @cpp_lib

📚 Эффективное сжатие текста: код Хаффмана в действии Приглашаем на открытый урок. 🗓 11 июня в 20:00 МСК 🆓 Бесплатно. Урок
📚 Эффективное сжатие текста: код Хаффмана в действии Приглашаем на открытый урок. 🗓 11 июня в 20:00 МСК 🆓 Бесплатно. Урок в рамках старта курса «Алгоритмы и структуры данных». На этом вебинаре мы продолжим разработку архиватора, реализовав код Хаффмана. ✔️ Рассмотрим, как построить дерево кодов, где частота появления символов определяет их битовое представление. ✔️ Интегрируем алгоритм в наш архиватор и проведем сравнительное тестирование с RLE. ✔️ Увидим, как эффективно работает код Хаффмана на текстовых файлах и других типах данных. Отличная возможность изучить продвинутые древовидные структуры данных на практическом примере. Развивайте алгоритмическое мышление, увеличивайте производительность программ. 🎁 Всем участникам вебинара дарим промокод, который дает скидку на обучение - Algo5 👉 Регистрация на вебинар: https://vk.cc/cMzzmd Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576

Семантика для кремниевых мозгов | Юрий Минаев, PVS-Studio Это Юрий Минаев, архитектор C++-анализатора PVS-Studio, и его доклад на C++ Zero Cost Conf 2024. Юрий рассмотрел семантику языка с точки зрения статического анализатора или фронтенда компилятора. автор: pvsstudio_rus #cpp #programming 👉 @cpp_lib

#cpp #programming 👉 @cpp_lib
#cpp #programming 👉 @cpp_lib

Хотите научиться эффективно отлаживать C++ код и устранять ошибки? ⏺️ На открытом вебинаре вы узнаете: ▸ Как искать и устраня
Хотите научиться эффективно отлаживать C++ код и устранять ошибки? ⏺️ На открытом вебинаре вы узнаете: ▸ Как искать и устранять ошибки в C++ с помощью таких инструментов, как assert'ы, логирование и юнит-тесты. ▸ Мы покажем, как использовать отладчик и почему core dump может стать вашим другом. ▸ Также познакомим вас с powerful инструментами, такими как address sanitizer и valgrind, которые помогут найти ошибки в самых сложных случаях. ❗️ Сформируйте свою «аптечку» инструментов и приемов, которые не только помогут вам быстрее находить баги, но и улучшат надежность кода на C++. Этот урок даст вам важные практические знания, которые пригодятся на всех этапах разработки. 📆 Посетите открытый урок 9 июня в 20:00 МСК в преддверие старта курса «C++ Developer» и получите скидку на обучение! Регистрация уже открыта: https://vk.cc/cMyKTU Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru

Опенсорс от кристалла до программного стека Нужны ли нам открытые архитектуры? Что нам нужно, чтобы они работали? В этом докладе мы попытаемся изложить основные проблемы и преимущества открытых архитектур на примере RISC-V — и расскажем про то, как происходит разработка различных инструментов, включая генераторы, компиляторы, средства бенчмаркинга. 00:00 Введение. Архитектура RISC-V, открытая и расширяемая (sigh). 05:38 Стадии конвейера и интерфейсы. 13:37 Открытые ядра на базе RISC-V, тестовое окружение и проблема верификации 19:14 Компиляторные технологии и LLVM 24:46 Моделирование и верификация RISC-V на разных уровнях и llvm-snippy 29:17 Задача бенчмаркинга и llvm-exegesis 34:24 Проблема высокоуровневого ПО, профили и развитие экосистемы 41:15 Ответы на вопросы источник #cpp #programming 👉 @cpp_lib