C
C++ Academy
31.08.2026 10:14 · 👁 927
3D-фрактал Mandelbulb можно отрендерить примерно в 100 строках C++ - вообще без полноценного 3D-движка.
В основе всего несколько идей:
- Mandelbulb строится через сферическую итерацию в степени 8
- distance estimator примерно определяет расстояние до поверхности фрактала
- sphere tracing двигает луч большими шагами через пустое пространство
- когда луч приближается к поверхности, конечные разности вычисляют нормаль для освещения
- результат записывается напрямую в обычный PPM-файл
То есть сложнейший на вид 3D-фрактал получается из математики, ray marching и небольшого количества C++.
Особенно красиво здесь то, что геометрия вообще не хранится в виде миллионов полигонов - поверхность вычисляется прямо во время рендера.
C
C++ Academy
29.08.2026 12:03 · 👁 1.4K
🔥 Джулиан Сторер - разработчик с более чем 30-летним опытом C++
Он создал сразу несколько заметных проектов в мире аудио-разработки:
- Tracktion DAW
- JUCE C++ Framework
- Cmajor DSP language
Особенно интересно тем, кто работает с:
- C++
- аудио и музыкой
- DSP
- DAW
- real-time приложениями
У него много сильного open-source кода и проектов, которые стоит изучить разработчикам из audio/software engineering.
https://github.com/julianstorer
C
C++ Academy
28.08.2026 12:20 · 👁 1.5K
Как Linux увеличивает счётчик без lock на SMP-системах
В ядре Linux есть трюк, который выглядит почти слишком просто: не заставлять все CPU драться за одну переменную.
Вместо общего счётчика используется per-CPU переменная - у каждого ядра своя копия данных.
На x86 макрос this_cpu_inc(var) превращается в одну инструкцию incl, которая работает с областью данных текущего CPU через GS.
Что это даёт:
* нет общего lock
* нет постоянной конкуренции между ядрами
* инкремент выполняется локально для текущего CPU
* операция получается быстрой и дешёвой
Идея мощная: если данные можно разделить по CPU, не нужно синхронизировать каждый маленький апдейт между всеми ядрами.
Так ядро экономит огромное количество лишней блокировки там, где код выполняется постоянно.
C
C++ Academy
28.08.2026 09:17 · 👁 1.6K
❓Кто этот призрак в вашем коде: изучаем особенности работы с легаси на C++
Легаси — вот что объединяет всех разработчиков на всех языках программирования. Мы учимся уживаться с «наследием», встраиваем его в современную кодовую базу или стараемся не трогать.
Пришло время разобраться с легаси в email-проекте Ghost in the code.
Вы получите семь писем от инженеров, в числе которых представитель России в Международной рабочей группе по стандартизации C++ Антон Полухин и эксперт по архитектуре Константин Владимиров. Вместе с ними и другими опытным разработчиками пройдете путь от навигации по «зрелому» коду с помощью AI до выстраивания процессов с учетом легаси.
➡️Подписывайтесь на серию писем, это бесплатно. Оставляйте email-адрес на сайте проекта — первое письмо придет 15 сентября.
C
C++ Academy
27.08.2026 13:15 · 👁 1.6K
✔️ curl - один из самых недооценённых проектов в истории софта.
Первый релиз вышел 20 марта 1998 года. Его запустил один разработчик - Daniel Stenberg.
Прошло больше 27 лет, а он всё ещё поддерживает проект.
Сегодня curl работает на миллиардах устройств и поставляется почти везде:
* macOS
* основные Linux-дистрибутивы
* Windows 10 и новее
* серверы
* контейнеры
* embedded-системы
* CI/CD пайплайны
Ирония в том, что многие пользуются curl каждый день, даже не думая об этом.
Одна маленькая CLI-утилита стала невидимой инфраструктурой интернета.
Вот так выглядит настоящий open source: без хайпа, без миллиардных раундов, но с кодом, который держит половину мира.
C
C++ Academy
27.08.2026 09:05 · 👁 1.6K
✈️🌍 FlightGear: мощный симулятор полетов с открытым исходным кодом.
Созданный для исследователей и энтузиастов авиации, FlightGear предлагает реалистичную симуляцию полетов с поддержкой множества самолетов и ландшафтов. Проект активно развивается сообществом, предоставляя возможность пользователям вносить свой вклад и улучшать опыт.
🚀Основные моменты:
- Поддержка множества типов самолетов и ландшафтов.
- Реалистичная физика полета и погодные условия.
- Многофункциональный интерфейс и расширяемая архитектура.
- Активное сообщество разработчиков и пользователей.
- Кроссплатформенная доступность.
📌 GitHub: https://github.com/FlightGear/flightgear
#c++
C
C++ Academy
25.08.2026 18:03 · 👁 1.7K
🖥 Большинство “простых” shuffle-алгоритмов дают кривой рандом
Частая ошибка:
for (int i = 0; i < n; i++) {
int j = rand() % n;
swap(a[i], a[j]);
}
На вид всё нормально: каждый элемент случайно меняется местами с другим.
Но проблема в вероятностях.
Для массива из n элементов существует n! перестановок.
Хороший shuffle должен давать каждой перестановке одинаковый шанс.
Наивный вариант делает n шагов, и на каждом шаге выбирает индекс из полного диапазона 0..n-1.
В итоге некоторые перестановки появляются чаще других.
Правильный подход - Fisher-Yates shuffle:
for (int i = n - 1; i > 0; i--) {
int j = random(0, i);
swap(a[i], a[j]);
}
Идея простая:
на каждом шаге мы выбираем элемент только из ещё не зафиксированной части массива.
Сначала выбираем последний элемент из всего массива.
Потом предпоследний - из оставшихся.
Потом следующий - из ещё меньшего диапазона.
Так каждая перестановка получает одинаковую вероятность.
В C++ лучше не писать через rand() % n, потому что там может быть ещё и modulo bias.
Нормальный вариант:
std::mt19937 rng(std::random_device{}());
for (int i = n - 1; i > 0; --i) {
std::uniform_int_distribution<int> dist(0, i);
int j = dist(rng);
std::swap(a[i], a[j]);
}
Shuffle - хороший пример, где код может выглядеть “рандомным”, но математически быть неправильным.
C
C++ Academy
23.08.2026 10:54 · 👁 2.6K
В C есть синтаксис, который выглядит как опечатка:
case '0' ... '9':
Кажется, что такой switch вообще не должен компилироваться.
Но в GCC это работает. Это расширение называется case ranges — можно задавать сразу диапазон значений внутри case.
Например:
case '0' ... '9':
return DIGIT;
case 'a' ... 'z':
case 'A' ... 'Z':
return LETTER;
Вместо десяти отдельных case для цифр и ещё десятков для букв — одна строка на диапазон.
Но есть нюанс: это не стандартный C, а расширение GCC. Если код должен быть переносимым между компиляторами, на такой синтаксис лучше не рассчитывать.
Одна из тех возможностей C, которые выглядят неправильно, пока не узнаешь, что компилятор действительно это поддерживает.
C
C++ Academy
22.08.2026 12:01 · 👁 2.4K
Одна строка C, которая может сломать вам логику
В C порядок вычисления аргументов функции не определён.
foo(i++, i++);
Из-за этого один и тот же код может дать разный результат:
* gcc: foo(1, 0)
* clang: foo(0, 1)
Причина простая: компиляторы по-разному вычисляют аргументы.
Такие вещи годами становились источником очень неприятных багов.
Хорошая новость: сейчас -Wall обычно умеет это подсветить.
Вывод банальный, но важный: не пишите код, который зависит от порядка вычисления аргументов.
C
C++ Academy
22.08.2026 10:10 · 👁 2K
🔥 Хочешь быстрее расти в IT? Хватит учиться в одиночку
Окружение решает больше, чем кажется.
Собрал папки и каналы, где можно быстрее влиться в нужное направление, следить за трендами и не вариться в своём пузыре.
AI: t.me/ai_machinelearning_big_data
Python: t.me/pythonl
Linux: t.me/linuxacademiya
Хакинг: t.me/linuxkalii
DevOps: t.me/DevOPSitsec
Docker: https://t.me/+90Z5TAyfuNU5YmRi
Golang: t.me/Golang_google
Rust: t.me/rust_code
C++: t.me/cpluspluc
C#: t.me/csharp_1001_notes
Java: t.me/javatg
JavaScript: t.me/javascriptv
React: t.me/react_tg
Frontend: t.me/front
PHP: t.me/phpshka
Android: t.me/android_its
Мобильная разработка: t.me/mobdevelop
Базы данных: t.me/sqlhub
Data Science: t.me/data_analysis_ml
Big Data: t.me/bigdatai
Математика: t.me/data_math
Физика: t.me/fizmat
Kubernetes: t.me/kubernetc
GameDev: https://t.me/gamedev
Haskell: t.me/haskell_tg
Собеседования и карьера:
DS собеседования: t.me/machinelearning_interview
Python собеседования: t.me/python_job_interview
Папка с вакансиями: t.me/addlist/_zyy_jQ_QUsyM2Vi
Папка Go разработчика: t.me/addlist/MUtJEeJSxeY2YTFi
Папка Python разработчика: t.me/addlist/eEPya-HF6mkxMGIy
Папка ML: https://t.me/addlist/2Ls-snqEeytkMDgy
Папка Frontend: https://t.me/addlist/mzMMG3RPZhY2M2Iy
Полезное сверху:
ИТ-мемы: t.me/memes_prog
Английский для программистов: t.me/english_forprogrammers
ИИ и технологии: t.me/vistehno
954 ГБ open-source курсов: https://t.me/+rKBQEMccAA01MTcy
ИТ-книги бесплатно: https://t.me/addlist/BkskQciUW_FhNjEy
Max Ai: https://max.ru/ai_machinelearning_big_data
Max python: https://max.ru/pythonl
ТЕХНО: https://max.ru/vistehno
Max Go: https://max.ru/Golang_google
Max Linux: https://max.ru/linuxkalii
Devops: https://max.ru/DevOPSitsec
C#: https://max.ru/csharp_ci
C++: https://max.ru/cpluspluc
SQL: https://max.ru/sqlhub
Java: https://max.ru/javatg
Подписывайся на нужные направления и собирай себе ленту, которая реально двигает вперёд.