C++ Academy
15.5K subscribers
878 photos
145 videos
1 file
774 links
По всем вопросам- @workakkk

РКН: clck.ru/3FmxJF

#VRHSZ
Download Telegram
⚙️ useful_abstractions - вычисления на этапе компиляции в C++23

Библиотека упрощает работу с constexpr и consteval. Один заголовочный файл, без зависимостей за пределами стандартной библиотеки.

Что можно делать при компиляции:

* Передавать строки в параметры шаблонов и собирать их из частей.
* Вычислять хеши.
* Получать имена типов без RTTI.
* Экранировать строки для JSON, URL и HTML.
* Проверять UTF-8 и преобразовывать его в UTF-16/UTF-32.
* Останавливать сборку с понятным сообщением при ошибке в данных.

Например, некорректный строковый литерал или недопустимое значение можно обнаружить ещё до запуска программы.

Требуется C++23: GCC 14+, Clang 19+ или свежий AppleClang.

Документация — https://constexprcore.github.io/useful_abstractions/
🔥6👍1
Как посчитать миллиарды уникальных значений, используя всего несколько килобайт памяти

Для этого существует HyperLogLog - вероятностный алгоритм оценки количества уникальных элементов.

Вместо хранения каждого значения он:

— хеширует элементы
— распределяет их по buckets
— отслеживает необычно длинные последовательности нулей в хэшах
— по этой статистике оценивает cardinality

Например, с 16384 регистрами можно оценивать даже огромные множества, занимая порядка десятков килобайт памяти.

При этом ошибка может оставаться около 1%.

Именно поэтому HyperLogLog любят в аналитике и больших данных: посчитать COUNT(DISTINCT ...) для миллиардов объектов можно без хранения миллиардов ID.

Магия тут не в точности до последнего элемента, а в очень хорошем компромиссе между памятью и результатом.
❤12👍5🔥2
This media is not supported in your browser
VIEW IN TELEGRAM
Лицо C++-разработчика, когда он написал 6000 строк кода, чтобы обогнать твои 4 строки на Python на 0,000438 секунды.
🤣26🥱17😁5👍2❤‍🔥1
⚡️ Как спроектировать ИИ-агента над корпоративными данными

6 октября в 17:00 мск пройдёт новая встреча Архитектурного клуба Яндекс 360 — открытого сообщества для архитекторов и инженеров высоконагруженных систем.

Даниил Смирнов, руководитель службы бэкенд-разработки Антиспама Яндекс 360 , разберёт архитектуру корпоративного агента: оркестратор, инструменты, память, EVAL и наблюдаемость.

На эфире обсудят:

- как сочетать полнотекстовый и векторный поиск, метаданные, фильтры и переранжирование;
- как наследовать права исходных систем и изолировать данные разных пользователей и организаций;
- как не выдавать из индекса и кеша данные тем, у кого нет доступа;
- как ограничивать автономность агента;
- как отдельно оценивать качество поиска, выбора инструментов и итогового ответа.


📅 6 октября, 17:00 мск
💻 Онлайн, участие бесплатное

→ Зарегистрироваться на встречу
🥱4❤2👍2🔥2🥰1
Физически корректный ray tracer всего в 99 строках C++

smallpt от Kevin Beason - один из самых известных примеров того, насколько компактным может быть настоящий path tracer.

В этих 99 строках есть:

* отражения
* преломления
* мягкие тени
* color bleeding
* зеркальные и стеклянные поверхности

Основа при этом минимальная: векторы, лучи, сферы и одна рекурсивная функция radiance().

Если дать рендеру тысячи samples per pixel, он собирает полноценный Cornell Box с зеркальной и стеклянной сферами.

Проект появился ещё в 2008 году и до сих пор отлично показывает базовую механику path tracing.
❤18👍6🔥5
😂 Собеседование на C++ прошло успешно

HR: у вас есть опыт с C++?

Я: конечно, отлично знаю оператор `goes to`.


int x = 10;

while (x --> 0) {
std::cout << x << '\n';
}


Никакого специального --> оператора в C++ тут нет.

Это просто:


x-- > 0


Сначала берётся текущее значение x и сравнивается с 0, а затем x уменьшается на единицу.

Поэтому код выведет:


9
8
7
6
5
4
3
2
1
0


Один из тех C++-трюков, который выглядит как отдельный оператор, хотя на самом деле это просто удачно поставленные -- и >.
🤣34❤13👍5🔥4
`🤖 В SourceCraft появилась команда цифровых разработчиков
Агентам можно назначать задачи прямо в GitLab. Они работают под собственными учётными записями, выполняют поручения и возвращают результат разработчику.
Если по ходу работы чего-то не хватает, агент сам запрашивает данные или согласование у команды — то есть не останавливается на первом незаполненном месте.
Ещё можно подключить собственного агента, в том числе созданного в Yandex AI Studio.
❤3🔥2👍1🤔1
😁30👍2💯2🥰1
🐧 Linux Cheat Sheet - шпаргалка по командам Linux

Самая удобная шпаргалка по Linux и Bash на русском: теория простым языком (как устроены файлы, процессы, права, память, загрузка и сеть), команды терминала, права доступа, процессы, сеть, SSH, systemd, grep/sed/awk, Vim и готовые однострочники - с примерами.

А для тех, кто идёт дальше, - продвинутый уровень: Bash для профи, LVM и RAID, трассировка и производительность, ядро, безопасность, контейнеры, восстановление системы и вопросы с собеседований.

https://github.com/justxor/Linux-/
❤7🔥5👍3🎉1
Minimum-Cost Maximum-Flow всего в ~110 строках C++

Хороший компактный пример одного из самых полезных алгоритмов на графах.

Задача MCMF: провести через сеть максимально возможный поток и одновременно сделать его стоимость минимальной.

В этой реализации:

- residual graph хранит оставшиеся возможности для потока
- SPFA каждый раз ищет самый дешёвый увеличивающий путь
- после поиска определяется bottleneck - сколько потока реально можно протолкнуть по найденному пути
- поток отправляется по пути
- процесс повторяется, пока путь из источника в сток больше найти нельзя

Особенно красивый трюк - обратные рёбра.

Прямое и обратное ребро добавляются подряд, поэтому получить индекс пары можно через:


id ^ 1

Если id чётный, id ^ 1 даст следующее нечётное ребро. Если нечётный - вернёт предыдущее чётное.

MCMF пригодится там, где мало просто найти максимальный поток и у каждого решения есть цена:

• назначение сотрудников на задачи
• логистика
• маршрутизация
• matching с разной стоимостью
• распределение ресурсов
• расписания

Компактный пример того, как residual network, shortest path и greedy augmentation собираются в один мощный алгоритм.
🔥7❤3
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 теперь можно контролировать явно, а не полагаться на выбор компилятора.
🔥18🤯2