Библиотека C/C++ разработчика
Kanalga Telegram’da o‘tish
Полезные материалы по всему, что может быть полезно плюсовику/сишнику. По всем вопросам @evgenycarter
Ko'proq ko'rsatish7 189
Obunachilar
-824 soatlar
-117 kun
-3130 kun
Postlar arxiv
Проектируем змейку под учебный RISC-V микроконтроллер
На третьем курсе некоторые направления в МИЭТ проходят лабораторный практикум, на котором им даётся возможность спроектировать собственную систему архитектуры RISC-V и написать под неё программу на С или C++.
В качестве затравки и повышения мотивации, хотелось показать им на что будет способна их процессорная система, и для этого было решено написать какую-нибудь простенькую игру, не требующую особых требований к ресурсам и графике. Так выбор пал на Змейку.
В этой я расскажу о том, как была написана данная игра под платформу, поддерживающую символьный вывод.
https://habr.com/ru/articles/915450/
📲 Мы в MAX
#cpp #programming
👉 @cpp_lib
Логика коэволюции компиляторов, инструментов разработки и языков программирования.
Выступление в институте iSpring 17 мая 2025 года. Огромная благодарность организаторам за приглашение и за разрешение выложить запись на моём канале.
В этой лекции мы поднимемся от самого нижнего уровня -- отдельных транзисторов до высокоуровневых языков программирования и проследим совместное развитие механизмов абстракции и инструментов разработки.
00:00 Начало: бинарные цифровые компьютеры
06:00 Мнемоническое представление и проблемы двоичного кода
14:10 Релокации и изобретение линкера
17:25 Язык ассемблера, секции и ассемблер как программа
24:30 Дизассемблер.
30:25 ABI и соглашения о вызове
35:35 Библиотеки
40:55 Проблемы ассемблера
48:10 Алгоритмические языки и компиляторы
54:45 Компилятор и его ограничения
01:03:40 Оптимизации в бэкенеде: inline и LTO
01:15:00 Гарантии по именам и механизмы абстракции
01:19:55 Завершение: абстракции не случайны
источник
📲 Мы в MAX
#cpp #programming
👉 @cpp_lib
Генерация лабиринтов: алгоритм Эллера
Сегодня я хотел бы рассказать о генерации идеального лабиринта — алгоритмом Эллера. Статья подойдёт всем любителям алгоритмов»
https://habr.com/ru/articles/667576/
📲 Мы в MAX
#cpp #programming
👉 @cpp_lib
ggwave — это компактная и переносимая библиотека C/C++ для передачи и приема коротких сообщений с использованием звуковых волн.
Она позволяет устройствам обмениваться данными через звук — без необходимости в Bluetooth, Wi-Fi или других беспроводных технологиях. Это особенно полезно для коротких одноразовых взаимодействий между устройствами, которые находятся рядом друг с другом.
Поддерживает:
* Передачу текста через звук
* Возможность генерации и анализа аудиосигналов в реальном времени
* Кроссплатформенность: работает на Windows, macOS, Linux, iOS, Android и в браузере (через WebAssembly)
Примеры использования:
* Аутентификация устройств поблизости
* Обмен контактами или ссылками
* Синхронизация устройств без интернета
https://github.com/ggerganov/ggwave
📲 Мы в MAX
#cpp #programming
👉 @cpp_lib
Этот проект содержит исходный код игр Command & Conquer: Tiberian Dawn и Command & Conquer: Red Alert, выпущенных как часть сборника Command & Conquer Remastered Collection.
Код распространяется под лицензией GPL v3 и предоставляет возможность энтузиастам и разработчикам модифицировать, изучать и использовать движок в рамках условий лицензии. В проекте используется C++ и множество современных практик разработки, а также система сборки CMake.
Репозиторий включает:
* Исходный код движка на C++
* Документацию по сборке
* Скрипты для интеграции с игрой
* Исторический контекст разработки
Проект ориентирован на обучение, поддержку моддинга и развитие сообщества вокруг классических RTS-игр.
https://github.com/electronicarts/CnC_Remastered_Collection
📲 Мы в MAX
#cpp #programming
👉 @cpp_lib
🔮 Асинхронный код часто воспринимается как магия: функции работают, задачи выполняются, но при сбоях или оптимизации становится непонятно, как всё устроено. Без этого сложно писать предсказуемые и эффективные решения.
❗️ На открытом уроке разберём, как Rust представляет асинхронные задачи, как компилятор преобразует async-функции и что происходит во время выполнения. Покажем, как описывать собственные асинхронные задачи и контролировать их поведение.
👣 Урок проходит в преддверии старта курса «Rust-разработчик. Продвинутый уровень». Если вы хотите понимать асинхронность на уровне реализации, а не только использовать её — подключайтесь.
➡️ Встречаемся 19 мая в 20:00 МСК. Подробности и регистрация: https://vk.cc/cXO63U
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
🚀 CUTE_HEADERS - Коллекция кроссплатформенных однофайловых библиотек на C/C++ без зависимостей, в основном используемых для разработки игр.
🔹 Математика (векторы, матрицы)
🔹 Системы частиц
🔹 Аудио и таймеры
🔹 Работа с файлами
🔹 Простая физика и коллизии
🔹 Анимация и графика
🔹 И многое другое!
Все библиотеки — в одном .h файле, без зависимостей. Отлично подходят для маленьких проектов, прототипов и учебных задач.
https://github.com/RandyGaul/cute_headers
📲 Мы в MAX
#cpp #programming
👉 @cpp_lib
⚔️ Линус Торвальдс против C++: Почему ядро Linux остается на C?
Почему Линус Торвальдс категорически запрещает C++ в ядре Linux. Казалось бы, C++ - это "C на стероидах", но для разработки ядра эти стероиды - яд.
Разбираем основные аргументы Линуса (и почему они имеют смысл в context of kernel development).
1. Исключения (Exceptions) - зло для ядра
В C мы проверяем коды возврата. В C++ исключение может вылететь откуда угодно.
🩷Проблема: Недетерминированность. Для ядра с 30 млн строк кода это ад отладки.
🩷Риск: Если МРТ-сканер или система управления полетами "выбросит исключение" и упадет, последствия будут фатальными. Ядро требует полного контроля над потоком выполнения.
2. Скрытое управление памятью (RAII)
Линус считает, что компилятор не должен делать ничего "за спиной" программиста.
🩷Проблема: Конструкторы, деструкторы и неявные аллокации.
🩷Аргумент: В ядре управление памятью должно быть ручным и прозрачным. Зависимость от магии компилятора снижает производительность и стабильность.
3. "Жирная" объектная модель
Нужно ООП? Его можно сделать и на C. Линус утверждает, что C++ тянет за собой переусложненные иерархии и абстракции, которые потом невозможно рефакторить.
🩷Цитата: "Ограничение проекта языком C означает, что люди не смогут его испортить... идиотской чушью 'объектной модели'".
💡 Как выглядит ООП в стиле Linux (на чистом C):
Вместо классов - структуры и указатели на функции. Это дает полиморфизм без оверхеда C++.
typedef struct {
int value;
// V-table на минималках: указатель на функцию
void (*increment)(struct Person *self);
} Person;
void increment_person(Person *self) {
self->value++;
}
int main() {
Person *p = (Person*)malloc(sizeof(Person));
p->value = 5;
p->increment = increment_person; // Привязка метода
p->increment(p); // Вызов: 6
free(p);
}
4. Проблема зависимостей (STL/Boost)
То, что стабильно для приложения в GNOME, недостаточно стабильно для ядра. Внедрение STL или Boost - это риск security-проблем (вспомним бэкдор в xz/liblzma) и раздувание бинарников.
А как же Rust?
Интересно, что к Rust отношение другое. Линус допускает Rust, потому что он (в отличие от C++) решает проблемы безопасности памяти, а не просто добавляет синтаксический сахар. C - прост, но позволяет выстрелить себе в ногу. Rust - строг. C++ - слишком сложен и неявен для ядра.
Отказ от C++ - это выбор между эргономикой разработчика и стабильностью системы. Для User-space приложений C++ прекрасен. Но для ядра, от которого зависит работа миллиардов устройств (от тостеров до спутников), консерватизм C - единственно верный путь.👉 Читать статью полностью: https://habr.com/ru/companies/otus/articles/902724/ 👇Холивар в комментах объявляется открытым: Согласны с Линусом, что C++ переусложнен для системного уровня, или это просто "синдром утенка" у старой школы? 📲 Мы в MAX #cpp #c #linux #kernel #linus #coding #holivar 👉 @cpp_lib
Как отслужить срочку, работая с Геранями, и получить диплом по дуальной системе Алабуга Политех?
Практика языка C (МФТИ, 2023-2024). Допсеминар: системы сборки (make, cmake).
00:00 Зависимости и хедера
08:22 Build.sh
11:48 Makefiles и декларативная модель
19:51 Ленивые и переменные
30:52 Автоматические переменные
36:15 Первая версия makefile
41:33 Функции и wildcards
47:40 Вторая версия makefile и зависимости от хедеров
56:36 Третья итерация: почти идеальный makefile
01:06:26 Знакомство с cmake
01:19:35 Бонус. Немного больше про cmake.
01:30:40 Окончательные уроки.
источник
📲 Мы в MAX
#cpp #programming
👉 @cpp_lib
📦 cpp-sort — это коллекция высокоэффективных алгоритмов сортировки, написанная на C++. Она предоставляет как классические алгоритмы (например, quicksort, mergesort), так и более современные, такие как ska_sort и spreadsort.
🔧 Основные особенности:
- Простое подключение
- Упор на производительность: множество алгоритмов оптимизированы под современные CPU
- Совместимость с
std::sort и пользовательскими компараторами
- Некоторые алгоритмы устойчивы (stable), другие — нет (для повышения скорости)
- Поддержка сортировки по ключу (projection)
💡 Если ты работаешь с C++ и тебе нужна кастомная или быстрая сортировка — обязательно стоит взглянуть. Особенно если std::sort не даёт нужного эффекта.
https://github.com/Morwenn/cpp-sort
📲 Мы в MAX
#cpp #programming
👉 @cpp_libСборка проектов Си и Си++: от простого к сложному. Часть II. Сборщики
Продолжаю тему о сборке проектов на Си и Си++, первая часть которой размещена здесь.
Рецепты сборки по правилам хорошего тона должны поставляться с проектом и очень желательно, чтобы они не были привязаны к конкретной ОС или хотя бы к конкретному дистрибутиву Linux, используя специфические команды вроде apt-get, yum, emerge. Если это небольшой пет-проект выходного дня, то, конечно, в качестве рецепта сгодится и bash-скрипт. Пользователи адаптируют. Но если к проекту подключаются другие разработчики, то лучше потратить время на автоматизацию сборки, чтобы не терять его оптом в будущем. В этой части речь пойдёт об инструментах, которые используются для автоматизации процесса сборки программного обеспечения.
https://habr.com/ru/companies/ruvds/articles/875620/
📲 Мы в MAX
#cpp #programming
👉 @cpp_lib
Сборка проектов Си и Си++: от простого к сложному. Часть I. Библиотеки
Каждый раз, в течение многих лет, собирая пилотную версию мизерного проекта или простой утилиты, мне кажется, что уж в этот раз точно обойдусь обычным скриптом для сборки, и никакие сборщики проекта мне не понадобятся. Но суровая реальность приводит меня в чувство уже в течение первых нескольких минут работы. Сначала оказывается, что до невозможности простая программка нуждается в JSON-парсере, HTTP-запросах CURL и прочих библиотеках. А по мере возбуждения хотелок эти все зависимости нарастают как снежный ком. И все мечты быстро скомпилировать страничку кода встречают на каждом шаге всё новые и новые проблемы.
Вот сегодня и расскажу о том, какие бывают способы борьбы с зависимостями и сборки проекта из множества файлов на Си++. Заодно те, кто не любят Си++, смогут порадоваться «прелестям» этого процесса. И хоть тема очень важная для программистов, но я обратил внимание, что даже многолетний опыт не гарантирует понимания этих процессов. Но сразу предупреждаю — история длинная даже с учетом всех попыток не убегать на смежные темы.
https://habr.com/ru/companies/ruvds/articles/871940/
📲 Мы в MAX
#cpp #programming
👉 @cpp_lib
🧵 STL Renderer — это простой рендерер STL-файлов, написанный с использованием C++, OpenGL и Dear ImGui.
🔹 Функции:
- Загрузка и визуализация STL-файлов (как ASCII, так и бинарных)
- Управление камерой: вращение, масштабирование, перемещение
- Интеграция с Dear ImGui для графического интерфейса
📦 Сборка:
Проект использует CMake и требует следующих зависимостей:
- OpenGL
- GLFW
- GLAD
- Dear ImGui
🚀 Отличный старт для тех, кто хочет разобраться, как визуализировать 3D-модели в формате STL с помощью OpenGL и создать минимальный интерфейс управления сценой.
https://github.com/SynrgStudio/STL-Renderer
📲 Мы в MAX
#cpp #programming
👉 @cpp_lib
+3
Если вы хотите основательно изучить C++, ресурс LearnCpp - один из лучших бесплатных онлайн-курсов по современному C++.
Сайт охватывает:
- Основы языка (переменные, типы данных, управление потоком, функции)
- Указатели, ссылки и динамическое выделение памяти
- Работа с массивами, строками и контейнерами STL
- ООП: классы, наследование, полиморфизм, инкапсуляция
- Современные фичи C++11/14/17/20: smart pointers, lambdas, auto, ranged for, structured bindings
- Обработка исключений
- Пространства имён, шаблоны, перегрузка операторов
- Управление ресурсами (RAII)
- Работа с файлами
- Продвинутые темы: многопоточность, move-семантика, constexpr и др.
Все главы структурированы в логическом порядке, с практическими примерами, пояснениями и заданиями. Сайт постоянно обновляется, чтобы соответствовать актуальным стандартам языка.
📚 Отличный выбор для как новичков, так и опытных разработчиков, желающих освежить знания по современному C++.
https://www.learncpp.com/
📲 Мы в MAX
#cpp #programming
👉 @cpp_lib
Алгоритмы на С/С++
Задача о Ханойской башне
Быстрая сортировка (quick sort)
Бинарный поиск в отсортированном массиве
Сортировка методом выбора
Сортировка методом пузырька
Минимизация просмотров в методе сортировки пузырьком
Модифицированный метод пузырька
Сортировка методом вставок
Шейкер - сортировка
источник
📲 Мы в 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 Типичный Сисадмин
1C разработка 📌
https://max.ru/odin1c_rus Cтатьи, курсы, советы, шаблоны кода 1С
Программирование C++📌
https://max.ru/cpp_lib Библиотека C/C++ разработчика
Программирование Go📌
https://max.ru/golang_lib Библиотека Go (Golang) разработчика
Программирование React📌
https://max.ru/react_lib React
Программирование Python 📌
https://max.ru/python_of Python академия.
https://max.ru/BookPython Библиотека Python разработчика
Java разработка 📌
https://max.ru/bookjava Библиотека Java разработчика
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 Обучающие видео, книги по Физике и Математике
Вакансии 📌
https://max.ru/progjob Вакансии в IT
Мир технологий 📌
https://max.ru/mir_teh Канал для любознательных
Бонус 📌
https://max.ru/piterspb_78 Свежие новости Санкт-Петербурга
https://max.ru/mockva_life Свежие новости Москвы
Базовый курс 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
Три теоремы о сортировках
Я знаю многих программистов и руководителей в IT компаниях, которые недолюбливают математиков и в частности считают их далёкими от жизни идиотами из-за их утверждений в духе "нельзя отсортировать последовательность быстрее, чем за nlogn" -- ведь это очевидным образом неверно, есть же сортировка подсчетом и radix sort.
Нюанс в том, что описанное выше -- это распространённая некорректная трактовка одной из ключевых теорем об алгоритмах сортировок, корректное утверждение выглядит так: "не существует алгоритма, который бы гарантированно находил перестановку n элементов, приводящую к возрастающему порядку, быстрее чем за nlogn используя только операции попарного сравнения". В этом утверждении больше слов, оно более сложно в плане когнитивного восприятия, ключевой момент обозначил жирным шрифтом, чувствуете разницу?
https://habr.com/ru/articles/893452/
📲 Мы в MAX
#cpp #programming
👉 @cpp_lib
Метапрограммирование
1. Введение в шаблоны
2. C++20: requires keyword
3. C++20: concepts
4. Operator spaceship
5. ADL и CRTP
6 (семинар). Typelist
7. Traits, Policy Based Design, Mixins
8. Полиморфизм
9 (семинар). Реализация std::function
10 (семинар). Реализация std::any без виртуальных функций
источник
📲 Мы в MAX
#cpp #programming
👉 @cpp_lib
