🦀 Почему Databento не переписали feed-handler на Rust

Команда Databento рассматривала Rust для переписывания высоконагруженного feed-handler, обрабатывающего 14 млн сообщений в секунду с задержкой <100 мкс.
Итог — выбрали C++23, и вот почему 👇

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

Почему Rust казался логичным выбором
- Уже используется в других системах Databento (DBN кодеки, клиентская библиотека, Python bindings).
- Отличные инструменты (cargo, тесты, документация).
- Безопасность и защита от data race.

Но столкнулись с ограничениями
1️⃣ Переиспользование буфера
Хотели читать данные в один буфер без перераспределений. Borrow checker не позволил, т.к. не понимает, что данные не переживают итерацию.

2️⃣ Самоссылочные структуры
Типичный C++ паттерн «класс владеет состоянием, подкомпоненты держат ссылки» не работает в Rust без Rc/Arc — добавляя оверхед и сложность.

3️⃣ Компиляционные дженерики
В C++ шаблоны дают гибкость (constexpr, partial specialization), а в Rust через traits и const generics — пока ограничено.

Итог
Rust — мощный и безопасный, но его строгая модель владения мешала ключевым оптимизациям под этот конкретный low-latency кейс.
C++ дал больше контроля и лучше вписался в существующую инфраструктуру.

📄 Полная статья: https://databento.com/blog/why-we-didnt-rewrite-our-feed-handler-in-rust
🤔 22
11
🤣 6
12 33 3.9K

Обсуждение 12

Обсуждение не доступно в веб-версии. Чтобы написать комментарий, перейдите в приложение Telegram.

Обсудить в Telegram