cpluspluc | Unsorted

Telegram-канал cpluspluc - C++ Academy

16151

По всем вопросам- @haarrp @itchannels_telegram - 🔥 best it channels РКН: clck.ru/3FmxJF

Subscribe to a channel

C++ Academy

🌟 SonicBoom: движок инференса без Python

HardenedVault, которая специализируется на безопасности Linux и компиляторов, выложила среду исполнения SonicBoom, написанной с нуля на C++ и CUDA. Python ей не нужен ни для работы, ни для сборки.

Цель проекта – локальный запуск языковых моделей на потребительских видеокартах.


Всё упаковано в одну библиотеку libsonicboom.so, которую можно подключить из любого языка через стандартный интерфейс C, основным языком для работы с ней авторы выбрали Scheme в реализации GNU Guile.

SonicBoom загружает модели в GGUF, генерирует текст на процессоре или видеокарте и поднимает локальный сервер, совместимый с API OpenAI.

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

🟡Механика

Скорость вывода дают уровни над вычислительными ядрами, а не сами ядра. Умножение квантованных матриц и токенизаторы частично перенесены из llama.cpp.

Над ними работает планировщик, который до запуска переписывает граф модели целиком, сливает соседние операции и записывает весь шаг генерации токена в один CUDA Graph, т. е. в готовую последовательность команд для видеокарты.

Ещё выше стоит компилятор на базе MLIR. Он сам генерирует часть ядер для GPU, в том числе для механизма внимания, и при первом запуске подбирает самый быстрый вариант под конкретную карту.

🟡Тесты

На RTX 3050 с 8 ГБ памяти сравнили SonicBoom и llama.cpp на одних и тех же моделях.

Gemma 4 E4B через SonicBoom дала генерацию в 53 токена в секунду против 44,8 у llama.cpp.

У Qwen2.5-0.5B вышло 344,7 токена в секунду против 307,6.

Когда контекст дорастает до 512 токенов, SonicBoom на Qwen уже чуть отстаёт.

Единственный сторонний результат на RTX 4060 Ti оказался хуже llama.cpp, 73,6 токена в секунду против 78, но его получили на сборке, ещё не настроенной под эту видеокарту.

Пока проверены только две модели, Gemma 4 E4B-it и Qwen2.5-0.5B-Instruct, и только видеокарты серии RTX 30.


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

Следующими в планах стоят модели Llama и Mistral, работа через Vulkan, генерация ядер для видеокарт других производителей и диффузионные модели.

Дальше SonicBoom планирует вырасти в фреймворк в духе PyTorch, где модель пишут на Scheme и компилируют в граф вычислений. Прототип этого режима уже обучает небольшой трансформер.


📌Лицензирование: GPL-3.0


🖥Github


@ai_machinelearning_big_data

#AI #ML #LLM #InferenceEngine #SonicBoom

Читать полностью…

C++ Academy

🧠 TIL: SQLite превращает числа в текст сразу по две цифры

Обычно integer → string делают циклом:

/ 10 → берём цифру
% 10 → остаток
и повторяем снова.

SQLite идёт хитрее.

В исходниках есть строка на 200 символов, содержащая все пары от 00 до 99:

000102030405...979899

При преобразовании числа SQLite обрабатывает его по две цифры за раз и просто берёт нужную пару символов по индексу.

То есть вместо множества операций /10 и %10:

делим на 100 → получаем две цифры → копируем готовую пару.

Маленькая оптимизация, но именно из таких деталей и состоит быстрый системный код.

Исходник: sqlite/src/util.c

Читать полностью…

C++ Academy

🛋 C++ реалистично симулирует взрослую жизнь: решил сэкономить на переезде, а всё равно заплатил за копию.


const Sofa mySofa;
Sofa newApartment = std::move(mySofa);


Кажется, диван должен «переехать». Но вызывается конструктор копирования.

Подвох: `std::move` не перемещает объект и не снимает `const`. Здесь он даёт const Sofa&&, а конструктору перемещения Sofa(Sofa&&) нужна ссылка без const.

Зато конструктор копирования Sofa(const Sofa&) подходит.

Даже компилятор знает: переезд без неожиданных расходов не бывает.

Читать полностью…

C++ Academy

🎲 Генератор случайных чисел всего в три строки

В 2003 году George Marsaglia предложил семейство генераторов Xorshift — один из самых простых и быстрых PRNG.

Для xorshift32 достаточно буквально трёх операций:

state ^= state << 13;
state ^= state >> 17;
state ^= state << 5;

Новое значение state становится следующим псевдослучайным числом.

Почему это интересно:

- почти нет вычислительных затрат;
- используются только битовые сдвиги и XOR;
- период для ненулевого state — до 2³² − 1;
- отлично подходит для игр, симуляций и других задач, где важна скорость.

Но есть важный нюанс: Xorshift не криптографически стойкий. Для токенов, паролей и security-задач его использовать нельзя.

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

Читать полностью…

C++ Academy

🖥 C++: объект уничтожен, а 16 МиБ всё ещё заняты

std::weak_ptr может удерживать память даже при expired() == true.

Причина в std::make_shared: обычно он размещает объект и управляющий блок в одной аллокации.

В примере на скриншоте массив на 16 МиБ находится прямо внутри Blob. После удаления последнего shared_ptr:

* деструктор объекта вызывается;
* expired() возвращает true;
* общий блок памяти остаётся выделенным, пока существует хотя бы один weak_ptr.

После сброса последней слабой ссылки блок можно освободить.

Что делать: удалять протухшие ссылки из долгоживущих кешей. Для крупных объектов также можно рассмотреть отдельную аллокацию через std::shared_ptr<Blob>(new Blob()).

Нюанс касается размера самого объекта. Если данные хранятся в обычном std::vector, его отдельный буфер освобождается при вызове деструктора.

[Разбор от Microsoft](https://devblogs.microsoft.com/oldnewthing/20230815-00/?p=108602)

Читать полностью…

C++ Academy

UTF-8-декодер на C: таблица и несколько строк кода

Бьёрн Хёрманн реализовал декодирование UTF-8 через конечный автомат (DFA). Он обрабатывает байты по одному, собирает кодовую точку Unicode и проверяет корректность последовательности.

Таблица utf8d выполняет две задачи:

* определяет класс очередного байта;
* выбирает следующее состояние автомата.

`ACCEPT` означает, что кодовая точка полностью прочитана. `REJECT` - обнаружена ошибка. Остальные состояния означают, что нужны дополнительные байты.

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

Нюанс: после последнего байта тоже нужно проверить состояние. Если оно не ACCEPT, строка некорректна - например, оборвалась посреди символа.

Читать полностью…

C++ Academy

Яндекс выложил в опенсорс 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++ Academy

Бьярн Страуструп о своём же C++: «на C легко выстрелить себе в ногу»

Создатель C++ однажды описал свой язык так:

«На C легко выстрелить себе в ногу. На C++ это сделать сложнее, но если уж получится, оторвёт всю ногу целиком».

В своём FAQ он объясняет: это верно для любого мощного языка. Чем лучше язык защищает от простых ошибок, тем менее очевидными становятся те, что остаются.

C++ действительно закрыл многие дыры C: RAII, умные указатели, строгая типизация, а на слайде за его спиной видно, что код на C++20/23 бывает проще и безопаснее старого. Но шаблоны, неопределённое поведение и сложная модель памяти по-прежнему позволяют выстрелить так, что потом неделями ищешь, куда попало.

Читать полностью…

C++ Academy

✔️ В 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++ Academy

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++ Academy

`🤖 В SourceCraft появилась команда цифровых разработчиков
Агентам можно назначать задачи прямо в GitLab. Они работают под собственными учётными записями, выполняют поручения и возвращают результат разработчику.
Если по ходу работы чего-то не хватает, агент сам запрашивает данные или согласование у команды — то есть не останавливается на первом незаполненном месте.
Ещё можно подключить собственного агента, в том числе созданного в Yandex AI Studio.

Читать полностью…

C++ Academy

Физически корректный ray tracer всего в 99 строках C++

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

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

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

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

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

Проект появился ещё в 2008 году и до сих пор отлично показывает базовую механику path tracing.

Читать полностью…

C++ Academy

Лицо C++-разработчика, когда он написал 6000 строк кода, чтобы обогнать твои 4 строки на Python на 0,000438 секунды.

Читать полностью…

C++ Academy

Разработчики 3D-графики, все сюда

Если вы пишете рендер на C++ с отдельным RenderThread, то знаете эту боль: данные грузятся в фоне, а GPU-ресурсы всё равно создаются в потоке отрисовки. И пока RenderThread в длинном цикле создаёт буферы и текстуры, он не рисует — он стоит, пока не обработает список загруженных ресурсов.

Мы это исправили! В новой статье на Хабре рассказываем, как пришли к новому подходу:
1. как вынесли создание буферов и текстур на потоки загрузки,
2. что сделали для Metal, а что для Vulkan,
3. и какие ограничения графических API пришлось учесть.

Другие инженерные инсайты от 2ГИС → в Telegram-канале RnD

Читать полностью…

C++ Academy

Разница между C++ и Python

Читать полностью…

C++ Academy

🎮 Оказывается, Wolfenstein 3D-подобный raycaster можно собрать примерно в 250 строках C++.

Принцип довольно элегантный: для каждого вертикального столбца экрана выпускается один луч через карту, а пересечения со стенами ищутся через DDA - Digital Differential Analysis.

Ключевой трюк:

deltaDist = abs(1 / rayDir)

После попадания в стену используется не обычная длина луча, а перпендикулярное расстояние до стены — это убирает характерное fish-eye искажение.

Дальше всё почти классически:

* рассчитывается высота стены на экране;
* выбирается текстура;
* вычисляется точка попадания;
* рисуется вертикальная полоса пикселей.

Минимум кода и уже получается полноценная псевдо-3D графика в стиле первых Wolfenstein/Doom-подобных движков.

Отличный проект, чтобы реально понять raycasting, DDA и основы старой 3D-графики.

Читать полностью…

C++ Academy

🔥 Хочешь быстрее расти в IT? Хватит учиться в одиночку

Окружение решает больше, чем кажется.

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

AI: t.me/ai_machinelearning_big_data
Python: t.me/pythonl
Linux: t.me/linuxacademiya
Хакинг: t.me/linuxkalii
DevOps: t.me/DevOPSitsec
Docker: /channel/+90Z5TAyfuNU5YmRi
Golang: t.me/Golang_google
Rust: t.me/rust_code
C++: t.me/cpluspluc
C#: t.me/csharp_ci
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: /channel/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: /channel/addlist/2Ls-snqEeytkMDgy
Папка Frontend: /channel/addlist/mzMMG3RPZhY2M2Iy

Полезное сверху:

ИТ-мемы: t.me/memes_prog
Английский для программистов: t.me/english_forprogrammers
ИИ и технологии: t.me/vistehno
954 ГБ open-source курсов: /channel/+rKBQEMccAA01MTcy
ИТ-книги бесплатно: /channel/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

Подписывайся на нужные направления и собирай себе ленту, которая реально двигает вперёд.

Читать полностью…

C++ Academy

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

Особенно когда сегодня нужен Claude для кода, завтра GPT для другой задачи, а команде ещё нужны общий баланс и понятные расходы.

Для такого сценария есть RouterAI, российская альтернатива OpenRouter. ChatGPT, Claude, Gemini, Grok и сотни других моделей доступны через один веб-чат и OpenAI-совместимый API. Сервис работает без VPN, есть Telegram-бот.

Для разработки предусмотрены инструкции по подключению Claude Code, Codex, Cline и Cursor. Если провайдер модели недоступен, запрос автоматически направляется резервному.

Оплата за использование, без обязательной подписки. Пополнить баланс можно в рублях российской картой или через СБП. Для бизнеса есть оплата по счёту, договор и закрывающие документы. Командам доступны роли, лимиты и статистика расходов.

По данным RouterAI, платформой пользуются десятки тысяч пользователей, включая разработчиков и компании. На сторонних площадках сотни положительных отзывов с оценками около 4,9–5 из 5: например, на Startpack сейчас 372 отзыва и рейтинг 4,9.

Практичный способ попробовать разные модели на своих задачах и платить за фактическую работу.

https://routerai.ru/l/c
#реклама
О рекламодателе
erid: 2W5zFJoafmB

Читать полностью…

C++ Academy

🔥Приглашаем на бесплатный открытый вебинар курса «Электроника и электротехника»:
«Беспроводные STM32. Разрабатываем плату для микроконтроллеров с радиоинтерфейсом»

📆Когда: 21 октября 2026, 20:00 (мск)

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

Что будет на вебинаре:
• Почему плата с Bluetooth работает на 5 метров, хотя в даташите обещают 50?
• Что такое согласование антенны и почему без него теряется половина мощности?
• Можно ли соединять вывод RF микроконтроллера напрямую с антенной или нужна обвязка?
• Практические рекомендации по трассировке радиочастотных трактов.
• Как адаптировать референс-дизайн под свой стек печатной платы.

Зарегистрируйтесь https://otus.pw/5jPS/?erid=2W5zFGxaSRP

Бесплатное занятие приурочено к курсу «Электроника и электротехника»

Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.

Читать полностью…

C++ Academy

🦀 Что удивляет в C, если первым языком был Rust?

Обычно разработчики переходят от C к Rust. Автор C for Rust Programmers пошёл в обратную сторону и собрал нюансы, которые легко пропустить.

Например, такая функция выглядит как принимающая массив из трёх элементов:


void inspect(char data[3]) {
printf("%zu\n", sizeof(data));
}


Но параметр здесь становится указателем. На платформе с 64-битными указателями увидите 8, а не 3. Длина массива в функцию не передаётся.

Ещё несколько сюрпризов:

• C-строки заканчиваются \0, а strlen() ищет этот байт, проходя по памяти.
• long обычно занимает 64 бита в 64-битных Unix-системах и 32 бита в Windows.
• malloc() может вернуть NULL, а язык не заставит проверить результат.
• Вместо ссылок с проверкой заимствований работают сырые указатели.

Полезное чтение для тех, кто пишет FFI или хочет понять, какие гарантии привычно получает от Rust.

https://bd103.dev/blog/2026-10-07-c-for-rust-programmers/

@rust_code

Читать полностью…

C++ Academy

🖥 Создатель C++ раскритиковал программирование через промпты

Бьярне Страуструп считает естественный язык слишком неоднозначным для точного описания программ. В интервью Райану Петерману он заявил, что ИИ часто создаёт раздутый код с ошибками и уязвимостями, который сложно проверять.

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

Особенно скептически он оценивает ИИ в системах, где критичны безопасность и производительность. При этом признаёт: большая часть мирового кода не относится к этой категории.

Читать полностью…

C++ Academy

🎮 Строка из 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++ Academy

Полноценный Lisp можно уместить всего в 99 строк C.

Внутри при этом:

- 21 примитив
- REPL
- сборщик мусора Cheney GC
- числа с плавающей точкой
- указатели
- типы значений

И всё это без `struct`-тегов, без внешних библиотек и без обычных динамических аллокаций для представления объектов.

Главный трюк - NaN boxing.

IEEE 754 оставляет много битов внутри специальных NaN-значений. Их можно использовать как скрытое хранилище:

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

В итоге одно 64-битное значение может представлять и число, и указатель, и другие типы данных.

Очень красивый пример того, как устройство IEEE 754 можно использовать для построения компактного рантайма языка.

Читать полностью…

C++ Academy

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++ Academy

🐧 Linux Cheat Sheet - шпаргалка по командам Linux

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

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

https://github.com/justxor/Linux-/

Читать полностью…

C++ Academy

😂 Собеседование на 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++-трюков, который выглядит как отдельный оператор, хотя на самом деле это просто удачно поставленные -- и >.

Читать полностью…

C++ Academy

⚡️ Как спроектировать ИИ-агента над корпоративными данными

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

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

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

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


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

→ Зарегистрироваться на встречу

Читать полностью…

C++ Academy

Как посчитать миллиарды уникальных значений, используя всего несколько килобайт памяти

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

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

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

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

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

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

Магия тут не в точности до последнего элемента, а в очень хорошем компромиссе между памятью и результатом.

Читать полностью…

C++ Academy

⚙️ 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/

Читать полностью…

C++ Academy

«Я про бэкенд»: как устроены AI-системы под капотом бигтеха

🗓 3 октября, Москва и онлайн

О чём: как разработчики высоконагруженных рекомендательных и генеративных систем справляются с нетривиальными вызовами. Доклады в 6 направлениях — от архитектуры систем с AI/ML до MLOps и работы на стыке бэкенда с железом.

Часть спикеров:
🎤 Михаил Цветков (Алиса AI и Умные устройства) — как устроен инференс генеративных ответов Алисы в Поиске
🎤 Алина Шестакова (Positive Technologies, Cloud SIEM) — вердикт за минуту: ML-фильтр и LLM на потоке более 40 тысяч событий в секунду
🎤 Андрей Аксёнов (Авито) — база векторных баз
🎤 Егор Хайруллин (Рекламные технологии Яндекса) — как распределённо обрабатывать более 100 ГБ/с в реальном времени без потерь и дублей с помощью YTsaurus Flow
🎤 Владислав Тюльбашев (Яндекс) — как надежно раздавать конфиги на 200к хостов при отказе [n-1] ДЦ
🎤 Алексей Логинов (Алиса AI и Умные устройства) — как сделать агентную платформу надёжной

Кроме того, зрителей ждет традиционный лайв, где бэкенд-инженеры Яндекса спроектируют архитектуру сложного сервиса в реальном времени. В этот раз задачу для эфира можете задать вы: участвуйте в проекте «2718», отправляйте свои кейсы, а организаторы выберут среди них самый сложный для открытого разбора.

Полная программа и регистрация

Читать полностью…
Subscribe to a channel