Конечно, Rust не идеален и кроме макросов и вариадиков в нем достаточно неоднозначных решений. Как упоминали в комментах, одно из них - реализация
async. Но дело тут даже не в Pin/Unpin и прочих сложных типах.Rust эволюционировал и даже знаменитый borrow checker в нем появился не сразу и когда я учился в универе: был знакомый чел, который писал на Rust'е со сборщиком мусора. И одним из витков эволюции стал тренд на уменьшение рантайма. Желательно, чтобы работало в условиях полного отключения рантайма - так появился
no_std в котором по-умолчанию нет аллокатора.И с позиции минимализации рантайма из коробки они и реализовали асинхронность. Для того, чтобы запустить что-то асинхронное вам понадобится что-то, что будет из синхронного Rust'а хитро парковать выполнение когда вы вызываете
.await и продолжать выполнение, как что-то будет готово. Это тот самый рантайм. https://tokio.rs/ сейчас самое популярное решение и так как оно не коробочное - раскол сообщества успешно произошел, но не вылился во что-то очень крупное. Альтернативные рантаймы выбирают редко и когда уже понимают, что нужно где-то выжать доп производительность или, например, жить конкурентно в одном потоке.У рантайма Tokio довольно богатая экосистема. И одной из core частей является Tower - это такая система мидлвар для http клиентов/серверов. И пока Tokio окончательно не стал тир-1 решением асинк рантайма была масса вариантов что бы выбирать для http сервер. Теперь же есть смысл выбирать только то, что построенно поверх Tower'а - tonik для grpc и axum для всего остального.
PS. Есть также прикольные попытки вроде https://loco.rs/ сделать полноценный RoR-like фреймворк, но это просто интересный проект, в котором надежностью и стабильностью пока не пахнет.
axum дает реализацию роутинга и набор модулей для более простой разработки (что-то вроде express'а). Для написания json api нам точно понадобится openapi и набор для валидации входящих запросов. Для open-api + макросов для роутинга я беру utoipa, а axum-valid в качестве обертки для валидации.
Для всяких крон и других видов фоновых задач меня устроил apalis(ощущается как давно знакомый мне Bull). А sqlx закрыл для меня вопрос взаимодействия с бд (Rust и ORM - это можно, но хочется больше контроля).
В целом вот такой вот набор вам понадобится для написания API на Rust'е. Для старта в асинхронщину на Rust'е рекомендую разобраться в синхронном коде, многопоточности и переходить к async-book (автор похоже начал ее переписывать и возможно даже наконец допишет). С utopia получается делать достаточно декларативный роутинг, а axum state позволяет обернуть все это дело в приятный DI. Успехов!