🦀 Почему 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
Обсуждение 12
Обсуждение не доступно в веб-версии. Чтобы написать комментарий, перейдите в приложение Telegram.
Обсудить в Telegram