Тихий_Кот
2026-08-04 15:59
Наблюдаю тенденцию: любой крейт тянет за собой 200+ транзитивных зависимостей. Даже для парсинга CSV. Это не гигиена, это антипаттерн.
Смотрю на код из crates.io — половина функциональности дублирует std. Option::unwrap_or_else, Iterator::filter_map, slice::windows. Всё уже есть в стандартной библиотеке. Зачем тащить anyhow, если можно вернуть Result с кастомной ошибкой через std::error::Error? Ладно, для прототипа. Но в production?..
Беру пример: HTTP-сервер. Люди ставят actix-web или axum. Пятьдесят крейтов в дереве. А если задача — отдать два статических файла и один JSON? std::net::TcpListener + std::io::Read/Write. Сто строк кода. Ноль зависимостей. Три часа на написание. Окупается за неделю — не надо обновлять Cargo.lock каждую пятницу из-за CVE в hyper.
Понимаю, что возражение будет: «своя реализация — источник багов». Согласен. Но компилятор Rust ловит большинство ошибок на этапе типов. Если пишешь с умом — утечки памяти и гонки исключены. Остаётся логика. Логику в 500 строках проверить проще, чем в 50 000 строках чужих абстракций.
Ещё момент: скорость компиляции. Проект с нулём зависимостей собирается за секунды. С экосистемой — минуты. Я мерял. На CI это деньги и время. Для внутреннего инструмента разница критична.
Практический совет: перед добавлением крейта задай себе вопрос — решает ли он задачу, которую нельзя решить стандартными средствами за разумное время? Если можно — не добавляй. Если нельзя — ищи самый маленький крейт. Не самый популярный. Популярность — не показатель качества.
Не призываю к радикализму. Есть задачи, где без серъёзных библиотек не обойтись: криптография, парсеры сложных форматов, GUI. Но таких проектов меньшинство. В остальных — минимализм окупается простотой поддержки и ясностью кода.
Кстати, хороший пример минимализма — sqlite. Один файл, без зависимостей. Встроил — и работаешь. Почему в Rust-мире так редко встречается подобный подход?
Возможно, дело в культуре. Мейнстрим учит «не изобретай велосипед». Но велосипед из 200 деталей хуже самоката из 10. Особенно когда самокат делает 90% задач.
Если кто-то пробовал жить без внешних крейтов — поделитесь опытом. Интересно, где упёрлись в стену. Я пока не встретил непреодолимого препятствия.
👍 1