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

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

Открыть в Telegram

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

Больше
7 224
Подписчики
-324 часа
-167 дней
-3930 день
Архив постов
+9
Базовый курс C++ (MIPT, ILab) Lecture 1. Scent of C++. Lecture 2. Указатели и ссылки Lecture 3. Имена и сущности Lecture 4. Инициализация и копирование. Lecture 5. RAII и перемещение Lecture 6. Приведение типов Lecture 7. Перегрузка операторов Lecture 8. Наследование и полиморфизм Lecture 9. Множественное наследование Lecture 10. Языки и грамматики источник 📲 Мы в MAX #cpp #programming 👉 @cpp_lib

CMake: Настройка проекта, подключение библиотек и мучения с Vulkan
Oh, and the documentation: It's extensive but never tells me what I need to know.
Эта цитата взята из обсуждения CMake на Reddit, и она очень точно описывает большую часть моих проблем с CMake: когда я хочу что-то сделать, документация не помогает с этим вообще, - приходится искать решения в чужих проектах и статьях. В этой статье будут разобраны проблемы, с которыми я столкнулся в процессе изучения Vulkan. Однако материал будет полезен и тем, кто настраивает любой другой проект. https://habr.com/ru/articles/873798/ 📲 Мы в MAX #cpp #programming 👉 @cpp_lib

🚀 Подборка полезных IT каналов в Max Системное администрирование, DevOps 📌 https://max.ru/i_odmin Все для системного администратора https://max.ru/bash_srv Bash Советы https://max.ru/sysadminof Книги для админов, полезные материалы https://max.ru/i_odmin_book Библиотека Системного Администратора https://max.ru/i_devops DevOps: Пишем о Docker, Kubernetes и др. https://max.ru/tipsysdmin Типичный Сисадмин https://max.ru/channel_win_sysadmin Системный Администратор Windows https://max.ru/channel_linux_admin Linux: Системный администратор https://max.ru/channel_linuxmod Linux https://max.ru/channel_i_linux Системный администратор https://max.ru/channel_devopslib DevOps, SRE, Sysadmin https://max.ru/channel_devops_star DevOps Star (Звезда Девопса) Excel лайфхак 📌 https://t.me/Excel_lifehack Excel лайфхак Английский с нуля 🇬🇧 https://max.ru/UchuEnglish 1C разработка 📌 https://max.ru/odin1c_rus Cтатьи, курсы, советы, шаблоны кода 1С https://max.ru/channel_DevLab1C 1С:Предприятие 8 Программирование C++📌 https://max.ru/cpp_lib Библиотека C/C++ разработчика https://max.ru/channel_cpp_geek C++ geek Программирование Go📌 https://max.ru/golang_lib Библиотека Go (Golang) разработчика Программирование React📌 https://max.ru/react_lib React Программирование Rust📌 https://max.ru/channel_rust_lib Программирование Python 📌 https://max.ru/python_of Python академия. https://max.ru/BookPython Библиотека Python разработчика Java разработка 📌 https://max.ru/bookjava Библиотека Java разработчика https://max.ru/channel_java_geek Java Geek GitHub Сообщество 📌 https://max.ru/githublib Интересное из GitHub Базы данных (Data Base) 📌 https://max.ru/database_info Все про базы данных Фронтенд разработка 📌 https://max.ru/frontend_1 Подборки для frontend разработчиков Библиотеки 📌 https://max.ru/programmist_of Книги по программированию https://max.ru/proglb Библиотека программиста https://max.ru/bfbook Книги для программистов Программирование 📌 https://max.ru/bookflow Лекции, видеоуроки, доклады с IT конференций https://max.ru/itmozg Программисты, дизайнеры, новости из мира IT https://max.ru/php_lib Библиотека PHP программиста 👨🏼‍💻👩‍💻 Шутки программистов 📌 https://max.ru/itumor Шутки программистов Защита, взлом, безопасность 📌 https://max.ru/thehaking Канал о кибербезопасности https://max.ru/xakkep_1 Хакер Free Книги, статьи для дизайнеров 📌 https://max.ru/odesigners Статьи, книги для дизайнеров Математика 📌 https://max.ru/Pomatematike Канал по математике https://max.ru/phismat_1 Обучающие видео, книги по Физике и Математике Вакансии в IT📌 https://max.ru/progjob https://max.ru/channel_rabotait Мир технологий 📌 https://max.ru/mir_teh Канал для любознательных Бонус 📌 https://max.ru/piterspb_78 Свежие новости Санкт-Петербурга https://max.ru/mockva_life Свежие новости Москвы https://max.ru/piterspb Питер Новости: Санкт-Петербург / СПБ / ДТП

Как написать 2D игру на C++ и чистом STL для терминала в Linux Я PHP разработчик с опытом работы в продакшне более 8 лет. После долгого и упорного труда мне стало скучно пилить микросервисы и бэкенды в хайлоде, я решил постичь магию разработки игр. Выбрал курс по Unreal Engine 5 и C++, так как там все структурировано, понятно, и в случае необходимости есть кому задать вопрос. На первой лекции по основам С++ преподаватель сразу предложил челлендж - написать 2D игру без использования игрового движка. Идея мне понравилась и я сразу приступил к реализации. https://habr.com/ru/post/708486/ 📲 Мы в MAX #cpp #programming 👉 @cpp_lib

Константин Владимиров — О денотации: разрешение имен и его пересмотр в C++23 Этот доклад — попытка сделать темную и мрачную область разрешения имен в C++ простой и ясной для практикующего программиста. источник 📲 Мы в MAX #cpp #programming 👉 @cpp_lib

На дворе C++23, а заставить компилятор проверять код всё ещё помогает только ассемблер Казалось бы, современный C++ дает нам море инструментов для контроля кода на этапе компиляции: static_assert, концепты, constexpr всё, что только можно. Но что делать, если вам нужно заставить разработчика вызвать обязательную функцию инициализации инфраструктуры тестирования для библиотечных классов, а проект собирается под ARM с агрессивным -O2 -Os -flto=auto в недрах Yocto/OpenBMC? В этой статье я расскажу, как попытка добавить удобный режим тестирования для датчиков которые используют header-only библиотеку столкнулась с невероятно умным оптимизатором GCC 14.2, и почему в эпоху мегабайтных исходников нам всё ещё приходится спускаться на уровень инлайн-ассемблера, чтобы просто заставить линкер выдать ошибку для не корректного кода (для определения правила использования хидера). https://habr.com/ru/articles/1058316/ 📲 Мы в MAX #cpp #programming 👉 @cpp_lib

😭 Многие разработчики с опытом 1–5 лет сталкиваются с одной проблемой: код писать получается уверенно, но переход на Middle+
😭 Многие разработчики с опытом 1–5 лет сталкиваются с одной проблемой: код писать получается уверенно, но переход на Middle+ или Senior так и не происходит. Часто причина не в знании C++, а в понимании архитектуры и проектирования. Пока приложение небольшое, изменения вносятся быстро. Но со временем новые функции начинают ломать старые, зависимости множатся, а любое изменение требует всё больше времени и проверок. 📆 22 июля в 20:00 МСК приглашаем на открытый урок, где разберём подходы, которые помогают сохранять управляемость проекта по мере его роста и обсудим, какие инженерные навыки помогают выйти на следующий профессиональный уровень. Поговорим о цикле обработки событий, модульности, проектировании интерфейсов, взаимодействии компонентов и разделении данных, логики и представления. Вы увидите, как создавать приложения, которые проще развивать, расширять и сопровождать. ️⚡ Открытый урок проходит в преддверии старта курса «C++-разработчик. Продвинутый уровень». Вы узнаете, как архитектура, паттерны проектирования, современный C++ и практики промышленной разработки помогают расти в профессии. Зарегистрируйтесь, чтобы задать вопросы эксперту и понять, каких навыков вам не хватает для следующего карьерного шага: https://vk.cc/cZJFM7 Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru

Как написать 2D игру на C++ и чистом STL для терминала в Linux Я PHP разработчик с опытом работы в продакшне более 8 лет. После долгого и упорного труда мне стало скучно пилить микросервисы и бэкенды в хайлоде, я решил постичь магию разработки игр. Выбрал курс по Unreal Engine 5 и C++, так как там все структурировано, понятно, и в случае необходимости есть кому задать вопрос. На первой лекции по основам С++ преподаватель сразу предложил челлендж - написать 2D игру без использования игрового движка. Идея мне понравилась и я сразу приступил к реализации. https://habr.com/ru/post/708486/ 📲 Мы в MAX #cpp #programming 👉 @cpp_lib

Парсер C++ на своем DSL: попытка обогнать компилятор Проекты растут. Кодовая база растёт. Время компиляции растёт вместе с ни
Парсер C++ на своем DSL: попытка обогнать компилятор Проекты растут. Кодовая база растёт. Время компиляции растёт вместе с ними и переходит все границы разумного. В какой-то момент я решил: а что если попробовать написать свой компилятор? Пока только для разработки, не для прода. На замену Clang++/G++/CL.EXE. Эта статья — о первом шаге на этом пути. О парсере C++, который я написал на своём DSL специально сделанном для этого изначально. https://habr.com/ru/articles/1058150/ 📲 Мы в MAX #cpp #programming 👉 @cpp_lib

В C++ мы привыкли к удобным абстракциям вроде std::thread и std::jthread, но как именно они маппятся на операционную систему?
В C++ мы привыкли к удобным абстракциям вроде std::thread и std::jthread, но как именно они маппятся на операционную систему? Спойлер: ядро Linux вообще не знает, что такое «потоки» в классическом понимании. Для планировщика Linux существует только одна базовая абстракция - task (структура task_struct). Когда вы создаете новый поток, под капотом pthreads дергает системный вызов clone(). В отличие от привычного fork(), который полностью копирует состояние процесса, clone() позволяет битовыми флагами (CLONE_VM, CLONE_FILES и др.) жестко задать, какие ресурсы будут расшарены между родителем и потомком: адресное пространство, таблица файловых дескрипторов или обработчики сигналов. Как ядро не путается в потоках и процессах: • Каждый созданный поток получает свой уникальный PID (на уровне ядра это называется TID - Thread ID). Это позволяет планировщику (CFS) независимо распределять их по ядрам процессора. • Все потоки одного приложения объединяются в Thread Group и делят общий TGID (Thread Group ID), который равен TID самого первого потока (main). • Когда мы вызываем функцию getpid(), она на самом деле возвращает именно TGID. Поэтому, когда вы делаете kill -9 <PID>, ядро видит TGID и прибивает всю группу потоков разом, не оставляя зомби. По ссылке ниже - отличный хардкорный разбор архитектуры потоков в Linux: от системных вызовов до разделяемых состояний. Полезно для понимания того, как наши высокоуровневые многопоточные программы реально исполняются железом и ОС. 🔗 Читать статью: https://telegra.ph/How-Linux-Threads-Actually-Work-clone-Thread-Groups-and-Shared-Memory-07-15 📲 Мы в MAX #cpp #programming 👉 @cpp_lib

Путеводитель C++ программиста по неопределенному поведению Все начинается просто и незатейливо: обычный десятиклассник увлека
Путеводитель C++ программиста по неопределенному поведению Все начинается просто и незатейливо: обычный десятиклассник увлекается программированием, знакомится с алгоритмическими задачками, решения которых должны быть быстрыми. Узнает о языке C++, учит минимальный синтаксис, основные конструкции, контейнеры, решает задачи с предопределенным и всегда корректным форматом ввода и вывода, и горя не знает... В это же время, где-то в большом мире, матерые разработчики каждый день ругают то одни языки программирования, то другие. По самым разным причинам: не удобно, нет какой-то возможности, много лишних букв писать, ошибки в стандартной библиотеке... Но есть язык, который ругают за все и особенно за такую непонятную и таинственную вещь как неопределенное поведение (undefined behavior, UB). Спустя лет пять или шесть наш простой десятиклассник, горя не видавший в море оторванных от реальности программ, внезапно узнает, что тем самым горячо нелюбимым языком всегда был, остается и будет его C++. А потом еще в течение нескольких лет он наткнется на самые кошмарные и невероятные ужасы, поджидающие программистов на C++ почти на каждом шагу. Так и появится эта серия заметок, собирающая наиболее отвратительные примеры, на которые очень легко наткнуться при решении повседневных задач. Важно: этот сборник не является учебным пособием по языку и рассчитан на тех, кто уже знаком с программированием, с C++, и понимает основные его конструкции. https://github.com/Nekrolm/ubbook 📲 Мы в MAX #cpp #programming 👉 @cpp_lib

40 лет программирования на C++ и встраиваемых языков — Марк Гуидарелли, CppCast 409 / C++Weekly 541 Обязательно ознакомьтесь с проектом Марка: https://github.com/mcguidarelli/trix В этом месяце к Джейсону и Матье присоединяется Марк Гуидарелли, чтобы обсудить историю C++ и эзотерические языки программирования. Мы также поговорим о личном опыте разработки Марка и о том, что означало «слияние» до появления систем контроля версий! источник #cpp #programming 👉 @cpp_lib

Константин Осипов — Стратегии слияния (compaction strategies) в LSM-деревьях Стратегия слияний в LSM-деревьях — проблема, для которой сейчас не существует доказанного оптимального решения. RocksDB, Cassandra, CockroachDB реализуют целый ряд эвристик и предлагают пользователю многочисленные настройки по оптимизации под конкретные сценарии нагрузки. В докладе я попробую разобрать эту проблему в свете последних изменений в аналогичном алгоритме слияний в движке Vinyl для Tarantool и Picodata, который я реализовал. Разберу различные стратегии, настройки, и техники оптимизации. Коснусь последних статей по теме. В результате, надеюсь, у слушателей появится более целостная картина проблемной области и компромиссов, на которые идут разработчики движков хранения данных. источник 📲 Мы в MAX #cpp #programming 👉 @cpp_lib

👨‍💻Большинство разработчиков используют готовые средства для создания интерфейсов и редко задумываются, что происходит под
👨‍💻Большинство разработчиков используют готовые средства для создания интерфейсов и редко задумываются, что происходит под капотом. Но именно понимание внутренних механизмов помогает создавать более гибкие, быстрые и управляемые приложения. 📆14 июля в 20:00 МСК приглашаем на открытый урок, где разберём, как создавать собственные элементы управления без сложных надстроек и лишних зависимостей. Вы узнаете, как обрабатывать действия пользователя, выводить графику на экран, создавать кнопки, текстовые поля и другие элементы интерфейса, а также организовывать их взаимодействие внутри приложения. Все подходы будут рассмотрены на практических примерах. 🏁Открытый урок проходит в преддверии старта курса «C++-разработчик. Продвинутый уровень». Зарегистрируйтесь, чтобы глубже понять устройство интерфейсов, задать вопросы эксперту и оценить возможности дальнейшего развития в C++: https://vk.cc/cZqKci Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru

Курс по C++ и SFML Простые программы на C++ В статье мы напишем пару простейших программ на C++ и посмотрим, как происходит их компиляция. https://ps-group.github.io/ps1/lesson_cpp_1 Знакомство с SFML. Компьютерная графика. SFML (Simple Fast Multimedia Library) — это C++ библиотека для мультимедиа. В статье мы воспользуемся SFML для рисования фигур в окне. https://ps-group.github.io/ps1/lesson_sfml_1 Основной цикл программы. Анимация. В статье мы освоим паттерн Game Loop, а также научимся обрабатывать события мыши и клавиатуры. https://ps-group.github.io/ps1/lesson_sfml_2 Обработка событий. Интерактив. В статье вы освоите обработку событий мыши и клавиатуры в мультимедийных программах и научитесь писать функции на языке С++ https://ps-group.github.io/ps1/lesson_sfml_3 Соглашения о кодировании на C++ Соглашения о кодировании для курса по C++/SFML https://ps-group.github.io/ps1/cxx_coding_style Комплексные задачи. Котик следует за мышкой В этой практике вы начнёте по шагам решать комплексные задачи, двигаясь от математической модели и псевдокода к готовой программе https://ps-group.github.io/ps1/sfml_workshop_1 Массовые столкновения На этом занятии вы научитесь программировать игры уровня Бильярда или Arkanoid https://ps-group.github.io/ps1/sfml_workshop_2 Ещё одна практика на SFML На этом занятии вы освоите более гибкие приёмы работы с SFML: виртуальную камеру, рисование произвольных фигур, проверку столкновения https://ps-group.github.io/ps1/sfml_workshop_3 Основной проект курса: 2D игра Цель проекта - самостоятельно написать комплексную программу, клон небольшой игры https://ps-group.github.io/ps1/project Задание | Спецификация проекта в виде MindMap Чтобы составить видение проекта-игры, нужно визуализировать. Сделать это поможет MindMap. https://docs.google.com/document/d/1Ki6DlbhDrZHskC6LED88FHeX8m-Se3-MrTpjwKYlcDk/edit?usp=sharing Задание | План проекта в виде RoadMap Чтобы справиться с известным проектом в известные сроки, нужно составить план действий. Сделать это поможет RoadMap. https://docs.google.com/document/d/1zdW81SLmgVf3ZXyMwXkOXxIwOzBzkTTvi4TTMLdUw_E/edit Пишем клон игры PacMan слой за слоем В этой коллекции примеров слой за слоем на C++/SFML воссоздаётся урезанный клон игры PacMan https://github.com/ps-group/sfml-packman Схема оценки проекта-игры В таблице записаны критерии оценки и примеры оценивания различных игр https://docs.google.com/spreadsheets/d/1n7OzeQEDujPDboW3dFn4M4iXhcPvlCR7FQbPRSE4jwM/edit?usp=sharing 📲 Мы в MAX #cpp #programming 👉 @cpp_lib

std::expected в C++23: гайд по миграции с исключений на функциональный error handling Исключения удобны, пока ошибки не стано
std::expected в C++23: гайд по миграции с исключений на функциональный error handling Исключения удобны, пока ошибки не становятся обычной частью логики. В C++23 для таких случаев есть std::expected: он явно показывает в сигнатуре, что функция вернёт либо результат, либо ошибку. Разберём, как перейти к этому подходу без переписывания проекта с нуля. https://habr.com/ru/companies/otus/articles/1054592/ 📲 Мы в MAX #cpp #programming 👉 @cpp_lib

🇷🇺 Разбираешься в радиочипах, оптике и связи? Забери до 1 000 000 рублей за свои инженерные навыки на турнире «Дронкон» 🇷�
🇷🇺 Разбираешься в радиочипах, оптике и связи? Забери до 1 000 000 рублей за свои инженерные навыки на турнире «Дронкон» 🇷🇺 «Сталинские Соколы» открывают регистрацию на 4-й Всероссийский турнир «Дронкон», который пройдет с 22 по 26 августа. Турнир пройдет по направлению: - Инженерное дело: навыки программирования, сборка электронного оборудования, беспроводная связь, оптические системы + стратегия «Битва Дронов»; Призовой фонд для победителей: 🥇место – 1 000 000 рублей 🥈место – 700 000 рублей 🥉место – 500 000 рублей Награда за 4-8 места - 100 000 рублей Пройди заочный онлайн-этап и получи путевку на очный этап турнира в Республику Татарстан! Перелет, питание, проживание - за счет организаторов. 🇷🇺 Подать заявку и узнать подробности 🇷🇺

👨‍💻 Два в одном: валидация и вызов в Control Flow Guard (CFG) Рэймонд Чен (Raymond Chen) в своем блоге The Old New Thing поделился интересными деталями реализации механизма Control Flow Guard в Windows. Обычно CFG работает в два этапа: сначала мы вызываем функцию вроде LdrpValidateUserCallTarget для проверки указателя, и если всё в порядке, возвращаемся и делаем вызов. Но существует и комбинированная версия, которая не просто проверяет указатель, но и сразу же делает по нему переход (jump). 🤔 Зачем это нужно и в чем подвох? Раз уж после валидации почти всегда следует вызов, объединение операций кажется логичным шагом для оптимизации. Но здесь кроется проблема: для такого трюка приходится менять соглашение о вызовах (calling convention). Регистры, которые использует функция валидации, ни в коем случае не должны пересекаться с регистрами, в которых лежат аргументы для итоговой функции. 🔧 Как это реализовано на уровне ассемблера: 🔹 x86-64: Обычная функция-валидатор принимает адрес в rcx и использует rax и rdx как временные регистры. Комбинированная версия принимает адрес в rax, использует r10 и r11 для своих расчетов, а в конце просто делает jmp rax. Все исходные параметры целевой функции остаются нетронутыми! 🔹 AArch64: Логика абсолютно та же. Обычная версия принимает адрес в x15, а комбинированная - в x9, завершаясь инструкцией br x9 вместо классического ret. Кстати, есть и приятный микро-бонус при обработке ошибок: если указатель оказывается «битым», комбинированной функции не нужно тратить инструкции на перекладывание адреса в нужный регистр перед прыжком в блок ошибки - плохой адрес уже находится там, где нужно (rax или x9). 🔗 Оригинальная статья и листинги дизассемблера: https://devblogs.microsoft.com/oldnewthing/20260708-00/?p=112510 📲 Мы в MAX #cpp #programming 👉 @cpp_lib

FTXUI Простая кроссплатформенная библиотека C++ для пользовательских интерфейсов на базе терминала! • Функциональный стиль • Простой и элегантный синтаксис • Создаваемые консольные UI поддерживают навигацию с помощью клавиатуры и мыши • Поддержка UTF8 • Поддержка анимации • Поддержка рисования • Нет зависимостей • Кроссплатформенность: Linux/MacOS, WebAssembly, Windows https://github.com/ArthurSonzogni/FTXUI 📲 Мы в MAX #cpp #programming 👉 @cpp_lib

Как в 19 лет я начал путь разработчика встраиваемого ПО Привет! Меня зовут Данила, мне 21 год, и за последние 2,5 года я успе
Как в 19 лет я начал путь разработчика встраиваемого ПО Привет! Меня зовут Данила, мне 21 год, и за последние 2,5 года я успел поработать в роли разработчика программного обеспечения для встраиваемых систем — в основном на базе STM32. В этой статье я хочу поделиться тем, как я вообще пришёл в эту сферу, с чего начинал, какие грабли собрал и какие выводы сделал по пути. https://habr.com/ru/articles/922322/ 📲 Мы в MAX #cpp #programming 👉 @cpp_lib