C
C++ Academy
08.10.2026 11:41 · 👁 511
🖥 Создатель C++ раскритиковал программирование через промпты
Бьярне Страуструп считает естественный язык слишком неоднозначным для точного описания программ. В интервью Райану Петерману он заявил, что ИИ часто создаёт раздутый код с ошибками и уязвимостями, который сложно проверять.
По его словам, изменение промпта может существенно менять реализацию, заставляя опытных разработчиков заново разбираться в результате. Страуструп рассказал, что знает специалистов, которые предпочитают уйти на пенсию, чем заниматься такой проверкой.
Особенно скептически он оценивает ИИ в системах, где критичны безопасность и производительность. При этом признаёт: большая часть мирового кода не относится к этой категории.
C
C++ Academy
06.10.2026 14:41 · 👁 1.5K
Яндекс выложил в опенсорс YTsaurus Flow
YTsaurus Flow - фреймворк потоковой обработки данных с сохранением состояния между событиями, альтернатива зарубежным Spark Structured Streaming и Kafka Streams. Технологию совместно разработали команды Yandex Infrastructure и Яндекс Рекламы для работы с большими потоками данных.
Flow изначально создавался для высоконагруженных real-time систем, прежде всего рекомендательных. Позволяет обрабатывать большие потоки событий с сохранением состояния, гарантией exactly-once и автоматическим распределением нагрузки. Это важно для сервисов, где задержка или потеря данных напрямую влияют на качество рекомендаций, антифрода и других ML-систем: свежие события быстрее доходят до моделей, а инфраструктура продолжает работать при сбоях и изменении нагрузки.
https://github.com/ytsaurus/ytsaurus/tree/main/yt/yt/flow
C
C++ Academy
06.10.2026 10:18 · 👁 1.8K
🎮 Строка из Quake III, которая выглядит как колдовство
i = 0x5f3759df - (i >> 1); // what the fuck?
Комментарий настоящий. Эта строка помогает вычислить 1/√x, не извлекая квадратный корень. В графике такая операция нужна для нормализации векторов: привести их длину к единице, сохранив направление.
Как работает трюк?
У float внутри есть показатель степени и дробная часть. Если прочитать биты положительного нормализованного числа как целое, получится величина, которая примерно соответствует его логарифму с масштабом и смещением.
А дальше используется свойство:
log₂(1/√x) = −½ × log₂(x)
Сдвиг >> 1 делит целое число на два. Вычитание из подобранной константы меняет знак и компенсирует смещение. Полученные биты снова читаются как float: это уже приближение к ответу.
Один шаг метода Ньютона доводит относительную погрешность примерно до 0,18%. В историческом тесте Криса Ломонта функция работала примерно в четыре раза быстрее прямого вычисления 1.0 / sqrt(x).
А закомментированная строка на картинке? Это второй шаг Ньютона: ещё больше точности за дополнительные вычисления.
💡 Красота алгоритма в том, что само представление числа в памяти становится частью вычисления.
https://github.com/id-Software/Quake-III-Arena/blob/master/code/game/q_math.c
C
C++ Academy
04.10.2026 10:38 · 👁 2.2K
Бьярн Страуструп о своём же C++: «на C легко выстрелить себе в ногу»
Создатель C++ однажды описал свой язык так:
«На C легко выстрелить себе в ногу. На C++ это сделать сложнее, но если уж получится, оторвёт всю ногу целиком».
В своём FAQ он объясняет: это верно для любого мощного языка. Чем лучше язык защищает от простых ошибок, тем менее очевидными становятся те, что остаются.
C++ действительно закрыл многие дыры C: RAII, умные указатели, строгая типизация, а на слайде за его спиной видно, что код на C++20/23 бывает проще и безопаснее старого. Но шаблоны, неопределённое поведение и сложная модель памяти по-прежнему позволяют выстрелить так, что потом неделями ищешь, куда попало.
C
C++ Academy
02.10.2026 13:05 · 👁 2.3K
Полноценный Lisp можно уместить всего в 99 строк C.
Внутри при этом:
- 21 примитив
- REPL
- сборщик мусора Cheney GC
- числа с плавающей точкой
- указатели
- типы значений
И всё это без `struct`-тегов, без внешних библиотек и без обычных динамических аллокаций для представления объектов.
Главный трюк - NaN boxing.
IEEE 754 оставляет много битов внутри специальных NaN-значений. Их можно использовать как скрытое хранилище:
- часть битов кодирует тип
- до 48 бит можно использовать под указатель
- обычные double при этом остаются обычными числами
В итоге одно 64-битное значение может представлять и число, и указатель, и другие типы данных.
Очень красивый пример того, как устройство IEEE 754 можно использовать для построения компактного рантайма языка.
C
C++ Academy
30.09.2026 12:59 · 👁 2.4K
✔️ В C/C++ есть любопытный трюк с AVX-512: `_mm512_maskz_loadu_epi8`.
Инструкция может выборочно загрузить до 64 байт по маске. Каждый бит маски отвечает за один байт:
- 1 - байт загружается
- 0 - вместо него ставится ноль
Самое интересное начинается, когда маска полностью нулевая:
#include <x86intrin.h>
void f(const char *p) {
_mm512_maskz_loadu_epi8(0, p);
}
При нулевой маске память фактически не читается, а результатом становится 512-битный вектор из нулей.
То есть значение p в таком случае не влияет на результат, а компилятор при оптимизации вообще может удалить весь вызов.
Хороший пример того, насколько необычно работают masked-load инструкции в AVX-512.
C
C++ Academy
28.09.2026 14:04 · 👁 3.1K
C23 сделал enum в C заметно удобнее для низкоуровневого кода.
Раньше базовый тип перечисления обычно выбирал компилятор, и enum часто занимал размер обычного int:
enum status {
OK = 0,
ERROR = -1
};
На многих системах это 4 байта.
В C23 можно явно указать базовый тип:
enum status8 : int8_t {
OK8 = 0,
ERR8 = -1
};
Теперь такой enum занимает 1 байт.
Можно и наоборот использовать большой тип:
enum status64 : uint64_t {
OK64 = 0,
ERR64 = UINT64_C(0xFFFFFFFFFFFFFFFF)
};
Это особенно полезно там, где важен точный layout структуры, ABI, сетевые протоколы, embedded и работа с бинарными форматами.
В C23 размер enum теперь можно контролировать явно, а не полагаться на выбор компилятора.
C
C++ Academy
26.09.2026 12:02 · 👁 2.4K
Minimum-Cost Maximum-Flow всего в ~110 строках C++
Хороший компактный пример одного из самых полезных алгоритмов на графах.
Задача MCMF: провести через сеть максимально возможный поток и одновременно сделать его стоимость минимальной.
В этой реализации:
- residual graph хранит оставшиеся возможности для потока
- SPFA каждый раз ищет самый дешёвый увеличивающий путь
- после поиска определяется bottleneck - сколько потока реально можно протолкнуть по найденному пути
- поток отправляется по пути
- процесс повторяется, пока путь из источника в сток больше найти нельзя
Особенно красивый трюк - обратные рёбра.
Прямое и обратное ребро добавляются подряд, поэтому получить индекс пары можно через:
id ^ 1
Если id чётный, id ^ 1 даст следующее нечётное ребро. Если нечётный - вернёт предыдущее чётное.
MCMF пригодится там, где мало просто найти максимальный поток и у каждого решения есть цена:
• назначение сотрудников на задачи
• логистика
• маршрутизация
• matching с разной стоимостью
• распределение ресурсов
• расписания
Компактный пример того, как residual network, shortest path и greedy augmentation собираются в один мощный алгоритм.
C
C++ Academy
25.09.2026 11:36 · 👁 2.6K
🐧 Linux Cheat Sheet - шпаргалка по командам Linux
Самая удобная шпаргалка по Linux и Bash на русском: теория простым языком (как устроены файлы, процессы, права, память, загрузка и сеть), команды терминала, права доступа, процессы, сеть, SSH, systemd, grep/sed/awk, Vim и готовые однострочники - с примерами.
А для тех, кто идёт дальше, - продвинутый уровень: Bash для профи, LVM и RAID, трассировка и производительность, ядро, безопасность, контейнеры, восстановление системы и вопросы с собеседований.
https://github.com/justxor/Linux-/
C
C++ Academy
24.09.2026 14:03 · 👁 2.5K
`🤖 В SourceCraft появилась команда цифровых разработчиков
Агентам можно назначать задачи прямо в GitLab. Они работают под собственными учётными записями, выполняют поручения и возвращают результат разработчику.
Если по ходу работы чего-то не хватает, агент сам запрашивает данные или согласование у команды — то есть не останавливается на первом незаполненном месте.
Ещё можно подключить собственного агента, в том числе созданного в Yandex AI Studio.