Библиотека C/C++ разработчика
Open in Telegram
Полезные материалы по всему, что может быть полезно плюсовику/сишнику. По всем вопросам @evgenycarter
Show more7 224
Subscribers
-324 hours
-167 days
-3930 days
Posts Archive
Базовый курс 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++ дает нам море инструментов для контроля кода на этапе компиляции: 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+ или 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: попытка обогнать компилятор
Проекты растут. Кодовая база растёт. Время компиляции растёт вместе с ними и переходит все границы разумного.
В какой-то момент я решил: а что если попробовать написать свой компилятор? Пока только для разработки, не для прода. На замену Clang++/G++/CL.EXE.
Эта статья — о первом шаге на этом пути. О парсере C++, который я написал на своём DSL специально сделанном для этого изначально.
https://habr.com/ru/articles/1058150/
📲 Мы в MAX
#cpp #programming
👉 @cpp_lib
В 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++, учит минимальный синтаксис, основные конструкции, контейнеры, решает задачи с предопределенным и всегда корректным форматом ввода и вывода, и горя не знает...
В это же время, где-то в большом мире, матерые разработчики каждый день ругают то одни языки программирования, то другие. По самым разным причинам: не удобно, нет какой-то возможности, много лишних букв писать, ошибки в стандартной библиотеке... Но есть язык, который ругают за все и особенно за такую непонятную и таинственную вещь как неопределенное поведение (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
Исключения удобны, пока ошибки не становятся обычной частью логики. В C++23 для таких случаев есть std::expected: он явно показывает в сигнатуре, что функция вернёт либо результат, либо ошибку. Разберём, как перейти к этому подходу без переписывания проекта с нуля.
https://habr.com/ru/companies/otus/articles/1054592/
📲 Мы в MAX
#cpp #programming
👉 @cpp_lib
🇷🇺 Разбираешься в радиочипах, оптике и связи? Забери до 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_libFTXUI
Простая кроссплатформенная библиотека C++ для пользовательских интерфейсов на базе терминала!
• Функциональный стиль
• Простой и элегантный синтаксис
• Создаваемые консольные UI поддерживают навигацию с помощью клавиатуры и мыши
• Поддержка UTF8
• Поддержка анимации
• Поддержка рисования
• Нет зависимостей
• Кроссплатформенность: Linux/MacOS, WebAssembly, Windows
https://github.com/ArthurSonzogni/FTXUI
📲 Мы в MAX
#cpp #programming
👉 @cpp_lib
Как в 19 лет я начал путь разработчика встраиваемого ПО
Привет! Меня зовут Данила, мне 21 год, и за последние 2,5 года я успел поработать в роли разработчика программного обеспечения для встраиваемых систем — в основном на базе STM32. В этой статье я хочу поделиться тем, как я вообще пришёл в эту сферу, с чего начинал, какие грабли собрал и какие выводы сделал по пути.
https://habr.com/ru/articles/922322/
📲 Мы в MAX
#cpp #programming
👉 @cpp_lib
