C++ Academy
15.6K subscribers
810 photos
143 videos
1 file
751 links
По всем вопросам- @workakkk

РКН: clck.ru/3FmxJF

#VRHSZ
Download Telegram
На UNIX stdout - это просто файловый дескриптор 1.

И из-за этого можно поймать очень неприятный эффект: если закрыть stdout, следующий открытый файл может получить тот же дескриптор 1.

То есть код вроде этого:


close(1);
FILE *f = fopen("output.txt", "w");
printf("hello\n");


Может записать printf не в терминал, а прямо в output.txt.

Потому что система обычно выдаёт минимальный свободный файловый дескриптор. Закрыл 1 - значит он снова свободен. Открыл файл - он может стать новым stdout.

Мелочь, но именно из таких мелочей и состоит настоящее понимание UNIX.
👍175🥰2
☕️ Latte: Ultra-Low Latency C++ Telemetry Framework

Latte — это заголовочная библиотека C++ для телеметрии, предназначенная для высокочастотной торговли и реального времени. Она измеряет циклы ЦП с помощью таймеров x86_64 и использует фиксированные кольцевые буферы для хранения данных, минимизируя накладные расходы.

🚀Основные моменты:
- Высокая точность измерений в наносекундах.
- Поддержка до 64 активных слотов на поток.
- Три режима измерений: Fast, Mid и Hard.
- Без динамических аллокаций во время работы.
- Статистический анализ и очистка данных от выбросов.

📌 GitHub: https://github.com/MoonFlowww/Latte

#cpp
❤‍🔥7👍4🔥2🎉1
🗺️ Полный роадмап C++ 2026 — от нуля до профессионала

Это не просто список тем, а пошаговый маршрут превращения новичка в профессионального C++-разработчика. Каждый уровень даёт не только перечень концепций, но и рабочие примеры кода с пояснениями «как правильно» и «как неправильно», чтобы вы сразу видели идиоматичный современный C++, а не устаревшие практики из учебников 2000-х годов.

Роадмап построен по принципу «теория рядом с практикой»: сначала вы изучаете концепцию на коде из соответствующего уровня, а затем углубляете понимание в разделе.

📚 Теория C++, где каждая тема разобрана от базовой интуиции до тонкостей, важных на собеседованиях и в продакшене. Такой подход экономит месяцы: вы не зубрите оторванные факты, а понимаете, почему язык устроен именно так.

Как пользоваться: идите по уровням сверху вниз, не перепрыгивая. Пишите каждый пример руками, ломайте его, смотрите на ошибки компилятора — именно так формируется интуиция. Параллельно решайте задачи на платформах из раздела ресурсов и читайте теорию по мере появления вопросов.

https://github.com/justxor/cpproadmap2026/tree/main
👍208😐2
🚀 CPrime: Новый язык программирования на основе C и C++

CPrime сочетает в себе скорость компиляции C и выразительность C++, минимизируя сложности последнего. Этот язык позволяет компилировать C-программы и многие C++ файлы, предлагая при этом удобные инструменты для структурирования кода.

🚀 Основные моменты:
- Высокая скорость компиляции, сопоставимая с C
- Поддержка объектно-ориентированного программирования
- Простота использования и совместимость с C
- Минимизация лишних сложностей C++
- Быстрая разработка и активное тестирование

📌 GitHub: https://github.com/LukeSchoen/CPrime
🤔15🤣11🍌2
This media is not supported in your browser
VIEW IN TELEGRAM
Quake сегодня исполнилось 30 лет. 🎉

Спустя три десятилетия всё ещё актуален интересен исходный код игры, которая помогла сформировать современные игровые движки, мультиплеерные сетевые технологии и культуру моддинга. 🎮

GitHub: github.com/id-software/quake
🔥175👍2🥰1
✔️ Компилятор C однажды «опроверг» теорему Ферма

Теорема Ферма говорит: не существует целых чисел, для которых выполняется:

`a³ + b³ = c³`

Её доказал Эндрю Уайлс в 1995 году - спустя 358 лет после формулировки.

Но затем Джон Регер показал забавный пример: цикл, скомпилированный через gcc -O2, мог напечатать:

Fermat's Last Theorem has been disproved

В коде происходило signed integer overflow - переполнение знакового int. А в C это undefined behavior.

Для компилятора это значит: «такого не должно происходить». Поэтому оптимизатор имеет право строить предположения, которые человеку кажутся абсурдными.

В итоге: программа выглядит так, будто нашла контрпример к великой теореме, хотя на деле просто попала в UB.

C не опроверг Ферма.

C просто напомнил, что undefined behavior - это не ошибка выполнения, а разрешение компилятору делать почти всё что угодно.
Please open Telegram to view this post
VIEW IN TELEGRAM
😡106👍6🗿2🥰1😁1
ИИ меняет не только разработку, но и дата-центры.

Когда говорят о развитии ИИ, обычно обсуждают новые модели и алгоритмы. Но по мере роста вычислительных нагрузок ограничения всё чаще возникают на уровне инфраструктуры. На infra.conf’26 Яндекс объявили, как перестраивает физическую и ML-инфраструктуру компании под новые требования.

Что меняется:

- компания переходит к концепции кампусов дата-центров мощностью до 180 МВт;
- внедряет жидкостное охлаждение для более эффективного отвода тепла и снижения энергопотребления;
- развивает внутренний сервис Dev Cluster, который ускоряет проведение ML-экспериментов и сокращает время разработки моделей.

Интересно здесь не только увеличение вычислительных мощностей. По мере развития ИИ инфраструктура всё сильнее становится частью продукта. Производительность моделей теперь зависит не только от качества алгоритмов, но и от того, насколько быстро можно предоставить вычислительные ресурсы, отвести тепло и масштабировать эксперименты.
5👍1👏1
🚀 Библиотека ycetl для C++20: constexpr на первом месте

ycetl — это заголовочная библиотека, обеспечивающая контейнеры и умные указатели, работающие как во время компиляции, так и во время выполнения. Она предназначена для создания сложных структур данных с использованием механизма памяти, который поддерживает многотипные операции.

🚀 Основные моменты:
- Контейнеры, работающие в constexpr и на этапе выполнения.
- Умные указатели с поддержкой различных схем владения.
- Многотипная память для безопасного управления типами.
- Примеры использования, включая компиляцию простых чисел и вложенных деревьев.
- Совместимость с C++20 и современными компиляторами.

📌 GitHub: https://github.com/zokrezyl/ycetl

#cpp
👍63🤔2🦄1
В C++20 у std::atomic появились wait() и notify_one().

Это удобная штука для случаев, когда поток должен просто дождаться изменения атомарного значения без mutex, condition_variable и ручного busy waiting.

Раньше для такого обычно оборачивали OS-level примитивы вроде futex или pthread_cond.

Теперь можно писать прямо так:


#include <atomic>
#include <thread>

std::atomic<bool> ready{false};

void waiter() {
ready.wait(false, std::memory_order_acquire);
}

void notifier() {
ready.store(true, std::memory_order_release);
ready.notify_one();
}


Что здесь происходит:

wait(false) блокирует поток, пока ready остаётся false.

Другой поток делает store(true) и будит ожидающего через notify_one().

Главное отличие от обычного цикла проверки - поток не крутится впустую и не жрёт CPU.

Это не полная замена condition_variable.

Для сложных predicates, очередей и нескольких условий condition_variable всё ещё нужен.

Но для простого флага, состояния или lightweight-синхронизации std::atomic::wait часто даёт более чистый и быстрый код.

C++20 тихо добавил одну из самых полезных низкоуровневых фич для concurrent programming.
🔥15👍43
🎯 Продвинутое использование отладчика GDB

Приглашаем на открытый урок.

🗓 08 июля в 20:00 МСК
🆓 Бесплатно. Урок в рамках старта курса «Системное программирование».

Программа урока:
✔️Кратко вспомним базовое использование GDB;
✔️Написание сценариев GDB;
✔️Условные точки останова и точки наблюдения;
✔️Дампы памяти и отладка по сети.

После занятия вы будете знать:
• Как отлаживать программы на другой машине;
• Как использовать возможности автоматизации отладчика для поимки плавающих багов;
• Как отладчик работает "под капотом".;

🔗 Ссылка на регистрацию: https://otus.pw/vKKX/?erid=2W5zFJLXK5K


Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.
2
⚡️ Почему RSA в OpenSSL не делает «обычное деление»

В реализации RSA внутри OpenSSL почти не используется прямое модульное деление. Вместо этого там работает Montgomery reduction - алгоритм, который ещё в 1985 году предложил Питер Монтгомери.

Идея простая: в RSA постоянно нужны операции вида «умножили большие числа и взяли остаток по модулю». Обычное деление на больших числах дорогое, поэтому его стараются избегать.

Montgomery reduction переводит вычисления в специальную форму, где параметр R выбирают как степень двойки. После этого часть дорогих делений превращается в сдвиги битов и более дешёвую арифметику.

Для пользователя это незаметная деталь. Но без таких трюков современный RSA был бы намного медленнее.

Есть хороший шанс, что HTTPS-соединение, которым вы пользуетесь прямо сейчас, где-то внутри уже опиралось на эту технику.
Please open Telegram to view this post
VIEW IN TELEGRAM
4👍3🔥1